初始化嵌套的struct数组

时间:2011-09-20 04:51:01

标签: c++ arrays struct initialization

我正在尝试初始化嵌套结构数组。

这是我正在做的事情:

// 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 ++。

2 个答案:

答案 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}
      }
    }
  },
};