我有:
struct X {
int i, j;
};
struct XArray {
X xs[3];
};
X xs1[3] { {1, 2}, {3, 4}, {5, 6} };
XArray xs2 { {1, 2}, {3, 4}, {5, 6} };
xs1
初始化正常,初始化xs2
会产生编译错误:
error: too many initializers for 'XArray'
XArray xs2 { {1, 2}, {3, 4}, {5, 6} };
^
有什么问题?为什么我不能初始化?
答案 0 :(得分:5)
你需要另一层次的大括号:
XArray xs2 { { {1, 2}, {3, 4}, {5, 6} } };
// ^ ^ ^
// | | |
// For XArray structure | |
// | |
// For xs array |
// |
// For the X structure
答案 1 :(得分:3)
编译ŕ假定 xs 是一个字段,只有在添加另一个括号时才会解析数组:
XArray xs2 { {{1, 2}, {3, 4}, {5, 6}} };
何时添加其他元素,例如
struct YArray {
X a;
X xs[3];
}
然后很明显a和xs都需要加入括号:
YArray y{
{1,2}, // a
{ {1, 2}, {3, 4}, {5, 6} } // xs
};
答案 2 :(得分:2)
X xs[3] = { {1,2}, {3,4}, {5,6}};
然后将整个部分插入代码右侧:
XArray x2 = { { {1,2}, ... {5,6} }};
这是因为XArray
只有一个成员,它需要一对括号括起来的支持:
XArray t = { /* value */ };
value
碰巧是一个数组,也需要括号:
X xs[3] = { /* value2 */ };
由于此数组包含三个值,因此每个值都必须使用一对数字进行初始化。
答案 3 :(得分:1)
你必须使用:
XArray xs2 { { {1, 2}, {3, 4}, {5, 6} } };
这样XArray
的第一个元素初始化为:{ {1, 2}, {3, 4}, {5, 6} }
。
在线here