我正在尝试初始化一个嵌套结构数组。
这就是我正在做的事情:
// 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++。
最佳答案
是的,你可以:始终编译 -Wall
的另一个原因,因为编译器可以给你有用的警告,例如:
warning: missing braces around initializer for ‘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;
}
关于c++ - 初始化嵌套结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7480289/