为什么这个代码可以工作,但不能呢?
问题描述:
语言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 ???除了上面提到的,我确定我没有对第二个程序做任何修改。
答
集合初始化语法(以封闭在{}
初始化)是由C.来到这句法在非常原始的形式,是专门绑初始化上下文一个非常古老的语言功能。您可以使用它来初始化声明中的对象,并且仅在声明中。你不能在其他地方使用它。所以,从这个角度来看,你所做的改变是一个非常严重的改变。它根本不是微不足道的,因为你似乎错误地相信。
C++ 11版本的C++语言扩展了{}
语法的可用性,通过它的统一初始化功能。恰巧在C++ 11中,你的第二个代码也是有效的。但它在任何C++ 11之前的编译器中都是无效的。您正在使用的编译器没有完全实现C++ 11,这就是您遇到错误的原因。
答
建立后无法初始化结构。这是因为C++中的结构与类相似,因此您需要单独访问数据成员,并且像在使用分配之前所说的那样。
+0
但我没有初始化结构“部分”。我已经初始化它的对象“part1”和“part2” – ColorDeColor
初始化和赋值是**不同**操作。 –
那是什么编译器? – billz
它适用于C++ 11 - http://ideone.com/3OUXRN – borisbn