C++ 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),因此

我用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};   // OK, a.i == 2

(事实上,
A
还包含一个类型成员(
A::B
)对于创建
A
类型的对象是无关紧要的)

回答得很好。OP声明了
structb{…}B并命名了一个成员,他们的代码会起作用,所以很可能他们只是忘记声明类型为
B
的成员是的,那个小
}B也会带来所有的不同。这就是为什么我们通常不赞成变量/成员声明中的类型定义!它太可爱了,除了迷惑每个人之外,没有其他目的。这种风格充其量只适用于酒吧测验,但不适用于人与人之间进行交流的代码。