2013-06-27 111 views
1

我试图初始化这样的糖果的成员。结构数组将不会初始化

#include <iostream> 
#include <string> 

struct CandyBar 
{ 
std::string Brand; 
float weight; 
int cal; 
}; 

int main() 
{ 
CandyBar candy[3]; 
candy[0] = {"toe foe", 30.2f, 500}; 
candy[1] = {"lays", 2.1f, 10}; 
candy[2] = {"fin", 40.5f, 1000}; 
return 0; 
} 

但它给了我附近的开括号 我知道这是错误的,但有没有这样一种方法来初始化结构的一个阵列中的语法错误。 有人可以解释为什么是上述代码错误。

+0

任何理由没有构造? – chris

+0

您的代码在C++ 11中按原样工作。 – bames53

+0

@ bames53,Huh,不认为可以使用'std :: string'作为成员,除非有一个构造函数要调用,但它至少在GCC上执行:) – chris

回答

2
CandyBar candy[3] = { 
{"toe foe", 30.2f, 500}, 
{"lays", 2.1f, 10}, 
{"fin", 40.5f, 1000}}; 

您可以这样做。

此样式只能用于初始化阶段,即创建变量时。它不能用于稍后分配值。 (PRE C++ 11)

+0

你也可以在分配阶段使用这种风格。 'CandyBar'是一个聚合。 – juanchopanza

+0

@juanchopanza标准中的任何证明? '8.5.1 Aggregates'完全没有谈及这个任务 – yuan

+0

@juanchopanza我已经说得更清楚了,该语句适用于

2

你不是初始化数组,你让分配其元素。如果您使用一个初始化,这将很好地工作:

CandyBar candy[3] = { 
    {"toe foe", 30.2f, 500}, 
    {"lays", 2.1f, 10}, 
    {"fin", 40.5f, 1000} 
}; 
+0

发布的代码应该在C++ 11中编译。 – Nawaz