我该怎么做来初始化一个结构的数组

时间:2014-12-18 04:41:03

标签: c++ arrays c++11

我使用以下方式初始化CandyBar结构数组,但编译器总是在struct initializer中说多余的元素。我尝试在数组定义中只放置一个结构初始化器,它已编译,但数组的其余2个元素为空 我该怎么办?

struct CandyBar{
    string brand;
    float weight;
    int calories;
};

int main(int argc, const char * argv[]) {

        array<CandyBar, 3> ary_cb =
    {
        {"Mocha Munch", 2.3, 350},
        {"Mocha Munch", 2.3, 350},
        {"Mocha Munch", 2.3, 350}
    };
    return 0;
}

3 个答案:

答案 0 :(得分:5)

你的结构周围缺少一对括号(记住,std::array是一个包含数组的结构):

    array<CandyBar, 3> ary_cb =
    {
        { 
            {"Mocha Munch", 2.3, 350} ,
            {"Mocha Munch", 2.3, 350} ,
            {"Mocha Munch", 2.3, 350} 
        }
    };

答案 1 :(得分:1)

数组的其余2个元素为null的原因是因为您将所有信息放在第一个candybar元素而不是其他两个candybar元素中。

解决方案:

int main(int argc, const char * argv[]) 
{

    array<CandyBar, 3> ary_cb =
    {
        { //Struct
            {"Mocha Munch", 2.3, 350},
            {"Mocha Munch", 2.3, 350},
            {"Mocha Munch", 2.3, 350}
        }
    };
    return 0;
}

来源 - &gt; Link

答案 2 :(得分:0)

除了quantdev的建议,这也有效(在C ++ 11中):

array<CandyBar, 3> ary_cb =
{
    "Mocha Munch", 2.3, 350 ,
    "Mocha Munch", 2.3, 350 ,
    "Mocha Munch", 2.3, 350 
};

在初始化嵌套的聚合集(即结构/数组)时,您必须省略所有大括号或没有大括号。