我的任务是删除一些编译器警告。我已经能够将问题归结为以下示例,我为什么不能正常工作而感到头疼。我想我不知道如何用C ++初始化东西。任何帮助将不胜感激。
我像这样使用g ++: 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, "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;
}
我认为上述内容可行,但我收到以下错误:
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’
答案 0 :(得分:8)
虽然@ 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 }
}
};
答案 1 :(得分:6)
你缺少很多的括号对。我添加了注释,以便更清楚地从哪个位开始。
要把它放到一个句子中,你的问题是可以使用{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 }
}
}
}
};
答案 2 :(得分:2)
每个块都需要表示一个对象。 Aisle struct包含一个数组对象(ais)。 ais数组的每个元素都包含一个Table结构。每个Table结构都包含一个数组对象(tab)。等等...
试试这个:
Aisle pizza =
{ // Aisle
{ // .ais
{ // .ais[0]
{ // .ais[0].tab
{ 0, "Tom", 100.0 }, // tab[0]
{ 1, "Mary", 101.0 }, // tab[1]
{ 2, "Jane", 103.0 }, // tab[2]
{ 3, "Joe", 104.0 } // tab[3]
}
},
{ // .ais[1]
{ // .ais[1].tab
{ 0, "Tom", 100.0 }, // tab[0]
{ 1, "Mary", 101.0 }, // tab[1]
{ 2, "Jane", 103.0 }, // tab[2]
{ 3, "Joe", 104.0 } // tab[3]
}
},
{ // .ais[2]
{ // .ais[2].tab
{ 0, "Tom", 100.0 }, // tab[0]
{ 1, "Mary", 101.0 }, // tab[1]
{ 2, "Jane", 103.0 }, // tab[2]
{ 3, "Joe", 104.0 } // tab[3]
}
}
}
};