如何解决c ++聚合初始值设定项g ++错误?
我在使用 g++ 编译这个名为初始化的简单聚合时遇到问题
struct A {
int a;
};
struct B {
int b;
};
struct C {
A a;
B b;
};
void fun() {
A a{0};
B b {12} ;
// g++ is OK with this
C c{ .a=a,.b=b };
// g++ is OK with this
C cc{ 0,{12}};
// msvc,clang accept this but g++ does not
C ccc{.a=0,.b={12}};
}
g++ 抱怨 error: 'A' has no non-static data member named 'b
解决方法
相反,这是一个其他人的错误(我提交了 llvm bug #49020,Richard Smith 已经在主干上修复了这个错误)。 gcc 拒绝是正确的(尽管错误没有意义。A
确实没有名为 b
的非静态数据成员,但这不是问题...)
这个:
C ccc{.a=0,.b={12}};
应该格式错误。这意味着您正在使用 a
初始化 C
的 =0
成员,并使用 b
初始化 C
的 ={12}
成员。>
但是您不能从 A
初始化 = 0
。这是格式错误的:
A a = 0;
因此,更广泛的初始化也是格式错误的。我不知道为什么其他人都接受。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。