c++ - 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 错误 #49020,Richard Smith 已经在主干上修复了该错误)。gcc 拒绝是正确的(尽管错误没有意义。A
确实没有命名的非静态数据成员b
,但这不是问题......)
这个:
C ccc{.a=0, .b={12}};
应该是不正确的。这意味着您正在初始化with的a
成员和C
with=0
的b
成员。C
={12}
但是您不能初始化A
from = 0
。这是格式错误的:
A a = 0;
因此,更广泛的初始化也是格式错误的。我不知道为什么其他人都接受。
推荐阅读
- windows - Hyper-v 通过将未识别的局域网设为默认值来禁用我的 wifi 网络
- ionic-framework - 如何为 android 和 ios 以外的操作系统构建 ionic 应用程序
- mysql - 使用一个单一查询从四个表中获取数据
- python - 无法从 Visual Studio Code 激活环境
- scala - 使用动态/具体类型初始化类型变量
- python - 如何制作从1开始的N个连续奇数的列表
- r - 从条形图制作图表后如何查看列?
- php - PHP - 如何在数组中插入新元素以避免重复?
- python-3.x - 从excel数据框中删除不需要的列
- oracle - 从表中循环删除未命名的外键