2014-03-05 182 views
0

语言C++ 下面是完整的代码:为什么这个代码可以工作,但不能呢?

#include <iostream> 

using namespace std; 

struct part 
{ 
int model_numb; 
int part_numb; 
float cost; 
}; 

void main() 
{ 
part part1, part2 = { 2022, 203, 2121.23F }; 
char dummy; 

part1.model_numb = 12345; 
part1.part_numb = 203; 
part1.cost = 5050.30F; 

cout << "******Part1*****" << endl; 
cout << "\nModel Numb: " << part1.model_numb 
    << "\nPart Numb: " << part1.part_numb 
    << "\nCost: " << part1.cost << endl << endl; 

cout << "******Part2*****" << endl; 
cout << "\nModel Numb: " << part2.model_numb 
    << "\nPart Numb: " << part2.part_numb 
    << "\nCost: " << part2.cost << endl << endl; 

part1 = part2; 

cout << " part1 = part2" << endl << endl; 

cout << "******Part1*****" << endl; 
cout << "\nModel Numb: " << part1.model_numb 
    << "\nPart Numb: " << part1.part_numb 
    << "\nCost: " << part1.cost << endl << endl; 

cout << "******Part2*****" << endl; 
cout << "\nModel Numb: " << part2.model_numb 
    << "\nPart Numb: " << part2.part_numb 
    << "\nCost: " << part2.cost << endl << endl; 


cin >> dummy; 
} 

如果我替换下面的行:

part part1, part2 = { 2022, 203, 2121.23F }; 

这些行:

part part1, part2; 
part2 = { 2022, 203, 2121.23F }; 

的代码将无法正常工作。它给了我语法错误(在'{')之前缺少';'(在'}'之前缺少';')和(预期表达式)在这些行上。 WHYY ???除了上面提到的,我确定我没有对第二个程序做任何修改。

+3

初始化和赋值是**不同**操作。 –

+0

那是什么编译器? – billz

+0

它适用于C++ 11 - http://ideone.com/3OUXRN – borisbn

回答

2

集合初始化语法(以封闭在{}初始化)是由C.来到这句法在非常原始的形式,是专门绑初始化上下文一个非常古老的语言功能。您可以使用它来初始化声明中的对象,并且仅在声明中。你不能在其他地方使用它。所以,从这个角度来看,你所做的改变是一个非常严重的改变。它根本不是微不足道的,因为你似乎错误地相信。

C++ 11版本的C++语言扩展了{}语法的可用性,通过它的统一初始化功能。恰巧在C++ 11中,你的第二个代码也是有效的。但它在任何C++ 11之前的编译器中都是无效的。您正在使用的编译器没有完全实现C++ 11,这就是您遇到错误的原因。

0

建立后无法初始化结构。这是因为C++中的结构与类相似,因此您需要单独访问数据成员,并且像在使用分配之前所说的那样。

+0

但我没有初始化结构“部分”。我已经初始化它的对象“part1”和“part2” – ColorDeColor

1

在第一种情况下,它是一个由c99和C++ 03支持的初始化语句。

在第二种情况下,它是对已经构建的{..}列表对象的赋值。它被称为扩展器初始化器列表{},并且在C++ 11中受支持。

因此,您需要使用C++ 11编译器才能正常工作。

+0

C或C++的所有版本都支持第一种情况的聚合初始化。不需要C99或C++ 03。 – AnT

+0

@AndreyT啊,你说得对。 C99添加了指定的初始化程序,如{.cost = 0.5} – Roman

相关问题