标量初始值设定项错误两边的大括号



>我有这两个结构

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

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

最新更新