我有这两种结构
[u'ATP', u'Start Date', u'Tournament', u'Venue', u'Location', u'Series', u'Court', u'Surface', u'Players']
我想初始化一个由struct vino_t {
int tip;
char *sorta;
int godina;
int cena;
};
struct vinarija_t {
char *ime_vinarija;
char lokacija[50];
int kolku_vina;
vino_t *lista_vina;
int zarabotka;
int nagradi;
}
类型的三个元素组成的数组(第二个结构)。
我的列表是这样的
vinarija_t
我不断得到错误:在类型vinarija_t lista_vinar[3] = {
{"Bovin", "Negotino", 3, {{1, "zhilavka", 2015, 850},{1, "rkaciteli", 2017, 700},{2, "kratoshija", 2009, 900}},2450,4},
{"Tikvesh", "Kavadarci", 3,{{2, "vranec", 2016, 750},{1, "smedervka", 2007, 1000},{3, "zinfandel", 2014, 850}},2600,3},
{"Dalvina", "Bosilovo", 3,{{2, "barbera", 2002, 1200},{3, "merlo", 2017, 850},{3, "malbek", 2016, 700}},2750,5} };
的标量初始值设定项周围。我尝试更换大括号,添加它们,删除它们,但不知何故没有解决我的问题。
答案 0 :(得分:2)
在vinarija_t
中,lista_vina
是vino_t *
。由于它是一个指针,因此只能使用单个值进行初始化(指针只保存一个地址)。如果您需要数组,则需要将lista_vina
更改为vino_t lista_vina[3];
。
话虽如此,你可能不希望如此。如果你想要一个可以是任何大小的数组,那么你真正想要的是std::vector<vino_t>
。 std::vector
可以从初始化列表构建,它还可以为您管理内存。
另请注意,您对字符串文字的所有char*
都是非法的。字符串文字的类型为const char[N]
,因此无法存储在char*
中。您应该考虑使用std::string
。做出所有这些改变会给你
struct vino_t {
int tip;
std::string sorta;
int godina;
int cena;
};
struct vinarija_t {
std::string ime_vinarija;
std::string lokacija;
int kolku_vina;
std::vector<vino_t> lista_vina;
int zarabotka;
int nagradi;
};
这还有一个额外的好处,即您的类现在可以完全移动和复制构造,而无需编写单行代码。