我正在尝试初始化嵌套结构数组。
这是我正在做的事情:
// init a nested struct
struct L1 {
struct L2 {
int i[4];
} l2[3];
};
L1::L2 l2 = {1,2,3,4};
L1::L2 l2_a[] = { {1,2,3}, {1,2}, {1,2,3,4}};
L1 l1 = {
{{1,2,3}, {1,2}, {1,2,3,4}}
};
L1 l1_a0 = {};
L1 l1_a1 = {0};
L1 l1_a[] = {
{{1,2,3}, {1,2}, {1,2,3,4}},
{{1,2,3}, {1,2}, {1,2,3,4}}
}; // ... error: too many initializers for 'L1'
根据上面发生的事情,我希望派生的最后一行(初始化嵌套结构的数组)是正确的,但令我惊讶的是,编译器不喜欢它。
可以完成吗? Here's关于初始化嵌套结构的相关帖子。顺便说一下,我正在使用g ++。
答案 0 :(得分:4)
是的,您可以:始终编译-Wall
的另一个原因,因为编译器可以为您提供有用的警告:
警告:在'L1 :: L2 [3]'
的初始值设定项周围缺少大括号
最终结果不是很好,但最终会在编译器输出的电传打字硬拷贝上浪费更少的树:
在此处观看:http://ideone.com/YKq3d
struct L1 {
struct L2 {
int i[4];
} l2[3];
};
L1::L2 l2 = { {1,2,3,4} };
L1::L2 l2_a[] = { {{1,2,3}}, {{1,2}}, {{1,2,3,4}}};
L1 l1 = {
{{{1,2,3}}, {{1,2}}, {{1,2,3,4}}}
};
L1 l1_a0 = {};
L1 l1_a1 = {{{{0}}}};
L1 l1_a[] = {
{{{{1,2,3}}, {{1,2}}, {{1,2,3,4}}}},
{{{{1,2,3}}, {{1,2}}, {{1,2,3,4}}}}
}; // ... sweet potatoes!
int main()
{
return 0;
}
答案 1 :(得分:0)
L1 l1_a[] = { // l1_a
{ // l1_a[0]
{ // l1_a[0].l2
{ // l1_a[0].l2[0]
{1,2,3,4} // l1_a[0].l2[0].i
},
{
{1,2,3,4}
},
{
{1,2,3,4}
}
}
},
{
{
{
{1,2,3,4}
},
{
{1,2,3,4}
},
{
{1,2,3,4}
}
}
},
{
{
{
{1,2,3,4}
},
{
{1,2,3,4}
},
{
{1,2,3,4}
}
}
},
};