为什么这个代码可以工作,但是那个代码没有?

时间:2014-03-05 07:54:58

标签: c++ compiler-errors syntax-error structure

语言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 :(得分:2)

聚合初始化语法(包含在{}中的初始值设定项)是一种来自C的非常古老的语言特性。这种语法以其原始形式特别与初始化上下文相关联。您可以使用它来初始化声明中的对象,并且只能在声明中初始化。你不能在其他任何地方使用它。因此,从这个角度来看,你所做的改变是一个非常严重的变化。这根本不是轻微的,因为你似乎错误地相信。

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

您无法在结构制作完成后对其进行初始化。这是因为c ++中的结构类似于类,因此您需要单独访问数据成员,并且在使用赋值之前有人说。