微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c ++聚合初始值设定项g ++错误?

如何解决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

这是一个 gcc 错误吗?

解决方法

相反,这是一个其他人的错误(我提交了 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 举报,一经查实,本站将立刻删除。