gpt4 book ai didi

c++ - 围绕标量初始值设定项错误的大括号

转载 作者:行者123 更新时间:2023-11-30 03:31:07 26 4
gpt4 key购买 nike

我有这两个结构

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 类型元素的数组(第二个结构)。

我有这样的 list

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_vinavino_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;
};

这还有一个额外的好处,即您的类现在可以完全移动和复制构造,而无需编写一行代码。

关于c++ - 围绕标量初始值设定项错误的大括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44461538/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com