我的任务是删除一些编译器警告.我已经能够将问题归结为以下示例,我正在摸不着为什么它不起作用.我想我不知道如何在C中初始化东西.任何帮助,将不胜感激.
我像这样使用g:@H_403_3@g init_arr.cpp
这是代码.我想在Aisle pizza的所有桌子上初始化所有人:
// 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,{ // Table 2 { 0,104.0 } } }; return 0; }
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’
解决方法
你错过了很多对括号.我添加了注释,以便更清楚地从哪个位开始.
把它放在一个句子中,你的问题是可以使用{1,2,3}初始化具有三个元素的数组,而包含数组作为其单个成员的结构是一个额外的层,因此必须使用{初始化{ {1,3}} – 外层是结构,内层是数组.
Aisle pizza = { // Aisle init { // Table ais[3] init { // ais[0] init { // Person tab[4] init { 0,104.0 } } },{ // ais[1] init { // Person tab[4] init { 0,{ // ais[2] init { // Person tab[4] init { 0,104.0 } } } } };