在结构中的数组中的结构中初始化数组时出现问题

Bit*_*iot 7 c++ arrays struct initialization

我的任务是删除一些编译器警告.我已经把问题归结为下面的例子,我正在摸不着为什么它不起作用.我想我不知道如何用C++初始化东西.任何帮助,将不胜感激.

我像这样使用g ++:g ++ init_arr.cpp

这是代码.我想在Aisle比萨的所有桌子上初始化所有人:

// init_arr.cpp
#include <iostream>
#include <string>
#include <sstream>

using namespace std;


struct Person {
    int    id;
    string name;
    double money;
};


struct Table {
    Person tab[4];
};


struct Aisle {
    Table ais[3];
};

int main() {
    cout << "main function()" << endl;

    Aisle pizza =
        {
            {  // Table 0
                { 0, "Tom", 100.0 },
                { 1, "Mary", 101.0 },
                { 2, "Jane", 103.0 },
                { 3, "Joe",  104.0 }
            },

            {  // Table 1
                { 0, "Tom", 100.0 },
                { 1, "Mary", 101.0 },
                { 2, "Jane", 103.0 },
                { 3, "Joe",  104.0 }
            },

            {  // Table 2
                { 0, "Tom", 100.0 },
                { 1, "Mary", 101.0 },
                { 2, "Jane", 103.0 },
                { 3, "Joe",  104.0 }
            }
        };

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我认为上述方法可行,但我收到以下错误:

g++ init_arr.cpp -std=gnu++0x
init_arr.cpp: In function ‘int main()’:
init_arr.cpp:49: error: too many initializers for ‘Table [3]’
init_arr.cpp:49: error: too many initializers for ‘Aisle’
Run Code Online (Sandbox Code Playgroud)

Dan*_*rey 7

虽然@ us2012展示了什么有效,并提供了一个很好的解释(+1给他),但我觉得它不太可读.这是一个替代方案:

Aisle pizza =
    {
        Table {  // Table 0
            Person { 0, "Tom", 100.0 },
            Person { 1, "Mary", 101.0 },
            Person { 2, "Jane", 103.0 },
            Person { 3, "Joe",  104.0 }
        },

        Table {  // Table 1
            Person { 0, "Tom", 100.0 },
            Person { 1, "Mary", 101.0 },
            Person { 2, "Jane", 103.0 },
            Person { 3, "Joe",  104.0 }
        },

        Table {  // Table 2
            Person { 0, "Tom", 100.0 },
            Person { 1, "Mary", 101.0 },
            Person { 2, "Jane", 103.0 },
            Person { 3, "Joe",  104.0 }
        }
    };
Run Code Online (Sandbox Code Playgroud)


us2*_*012 5

你错过了很多对括号.我添加了注释,以便更清楚哪个位从哪里开始.

把它放到一个句子中,你的问题是可以初始化{1,2,3}一个包含三个元素的数组,而包含数组作为其单个成员的结构是一个额外的层,因此必须初始化{ {1,2,3} }- 外层是struct,内层是数组.

Aisle pizza =
    { // Aisle init
      { // Table ais[3] init
        {  // ais[0] init
         {  // Person tab[4] init
            { 0, "Tom", 100.0 },
            { 1, "Mary", 101.0 },
            { 2, "Jane", 103.0 },
            { 3, "Joe",  104.0 }
         }
        },

        {  // ais[1] init
         {  // Person tab[4] init
            { 0, "Tom", 100.0 },
            { 1, "Mary", 101.0 },
            { 2, "Jane", 103.0 },
            { 3, "Joe",  104.0 }
         }
        },

        {  // ais[2] init
         {  // Person tab[4] init
            { 0, "Tom", 100.0 },
            { 1, "Mary", 101.0 },
            { 2, "Jane", 103.0 },
            { 3, "Joe",  104.0 }
         }
        }
      }
    };
Run Code Online (Sandbox Code Playgroud)