>我有这两个结构
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} };
并且我经常收到错误:类型vino_t*
的标量初始值设定项周围的大括号. 我尝试更改牙套,添加它们,删除它们,但不知何故,没有什么能解决我的问题。
在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;
};
这还有一个额外的优势,即您的类现在可以完全移动和复制可构造,而无需编写任何代码。