0

我在尝试编译我的 MFC 项目时遇到的这个错误让我有点困惑。为简化起见,我希望列举如下内容:

enum Cars
{
Audi,
Bmw,
Ford
};

哪个工作正常,但是当我定义任何“汽车”时编译时出现错误,例如:

#define Audi 100
...
...
enum Cars
{
    Audi,
    BMW,
    Ford
}; 

我得到的错误是,在我写的标题和源文件中

错误 C2143:语法错误:在“常量”之前缺少“}”

错误 C2143:语法错误:缺少“;” 前 '}'

错误 C2059:语法错误:'}'

我不知道为什么会出现语法错误,因为这两个部分分别编译得很好。我知道我可以轻松地在枚举定义中定义 Audi =100,但在我的实际项目中我不能这样做。

4

2 回答 2

2

当您进行定义时,就像对该文本进行搜索和替换,然后进行编译,因此对于您的示例,您现在将 Audi 变为 100,因此您的枚举看起来像

enum Cars
{
    100,
    BMW,
    Ford
}; 

由于 100 不是有效的枚举名称,您会看到此错误。

如果您希望 Audio 值为 100,您可以这样做

enum Cars
{
    Audi = 100,
    BMW,
    Ford
}; 

虽然这样做时要小心,因为 BMW 和 Ford 现在将它们的值分别设置为 101,102,因此如果这是在头文件中,您需要确保进行完全重新编译。

于 2013-08-12T07:48:53.977 回答
-2

我更喜欢保留宏并使用 C++11 的以下特性。enum class Cars { AUDI = 100, BMW, FORD };

于 2013-08-12T08:04:51.363 回答