C++ c++;11初始值设定项列表不';嵌入对象的文字常量值不起作用?
我用c++11编写了一个简单的程序:C++ c++;11初始值设定项列表不';嵌入对象的文字常量值不起作用?,c++,c++11,initializer-list,aggregate-initialization,C++,C++11,Initializer List,Aggregate Initialization,我用c++11编写了一个简单的程序: struct A{ int i; struct B{ int i; int j; }; } a = {2, {3, 4}}; g++-7编译并给出错误: error: too many initializers for 'A' }a={2,{3,4}}; ^ 我只是想知道如何使用文字常量声明一个对象,如何修复它 非常感谢。由于您的类型a仅包含一个数据成员(类型int),因此
struct A{
int i;
struct B{
int i;
int j;
};
} a = {2, {3, 4}};
g++-7编译并给出错误:
error: too many initializers for 'A'
}a={2,{3,4}};
^
我只是想知道如何使用文字常量声明一个对象,如何修复它
非常感谢。由于您的类型
a
仅包含一个数据成员(类型int
),因此您的初始值设定项中最多可以有一个元素:
struct A{
int i;
struct B{
int i;
int j;
};
} a = {2}; // OK, a.i == 2
(事实上,
A
还包含一个类型成员(A::B
)对于创建A
类型的对象是无关紧要的)回答得很好。OP声明了structb{…}B代码>并命名了一个成员,他们的代码会起作用,所以很可能他们只是忘记声明类型为B
的成员是的,那个小}B代码>也会带来所有的不同。这就是为什么我们通常不赞成变量/成员声明中的类型定义!它太可爱了,除了迷惑每个人之外,没有其他目的。这种风格充其量只适用于酒吧测验,但不适用于人与人之间进行交流的代码。