语言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 ???我确定我没有对第二个程序做任何改动,除了提到的那个。
答案 0 :(得分:2)
聚合初始化语法(包含在{}
中的初始值设定项)是一种来自C的非常古老的语言特性。这种语法以其原始形式特别与初始化上下文相关联。您可以使用它来初始化声明中的对象,并且只能在声明中初始化。你不能在其他任何地方使用它。因此,从这个角度来看,你所做的改变是一个非常严重的变化。这根本不是轻微的,因为你似乎错误地相信。
C ++ 11版本的C ++语言通过其统一初始化功能扩展了{}
语法的可用性。碰巧在C ++ 11中你的第二个代码也是有效的。但它在任何前C ++ 11编译器中都无效。您正在使用的编译器没有完全实现C ++ 11,这就是您收到错误的原因。
答案 1 :(得分:1)
在第一种情况下,它是c99和c ++ 03支持的初始化语句。
在第二种情况下,它是已经构造的{..}列表对象的赋值。它被称为扩展器初始化列表{},在c ++ 11中受支持。
因此,您需要使用c ++ 11编译器才能工作。
答案 2 :(得分:0)
您无法在结构制作完成后对其进行初始化。这是因为c ++中的结构类似于类,因此您需要单独访问数据成员,并且在使用赋值之前有人说。