我使用以下方式初始化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;
}
答案 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
};
在初始化嵌套的聚合集(即结构/数组)时,您必须省略所有大括号或没有大括号。