Visual c++ 使用#在枚举数据类型中定义常量,语法错误

Visual c++ 使用#在枚举数据类型中定义常量,语法错误,visual-c++,enums,mfc,c-preprocessor,Visual C++,Enums,Mfc,C Preprocessor,当我试图编译我的MFC项目时,我对这个错误感到有点困惑。为了简单起见,我想列举如下内容: enum Cars { Audi, Bmw, Ford }; 这很好,但是当我定义任何“汽车”时,我在编译时会出错,例如: #define Audi 100 ... ... enum Cars { Audi, BMW, Ford }; 我得到的错误都在我写的头文件和源文件中 错误C2143:语法错误:“常量”之前缺少“}” 错误C2143:语法错误:缺少“;”在“}”之前 错误

当我试图编译我的MFC项目时,我对这个错误感到有点困惑。为了简单起见,我想列举如下内容:

enum Cars
{
Audi,
Bmw,
Ford
};
这很好,但是当我定义任何“汽车”时,我在编译时会出错,例如:

#define Audi 100
...
...
enum Cars
{
    Audi,
    BMW,
    Ford
}; 
我得到的错误都在我写的头文件和源文件中

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

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

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


我不知道为什么会出现语法错误,因为这两部分可以单独编译。我知道我可以很容易地在枚举定义中定义Audi=100,但在我的实际项目中,我无法做到这一点。

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

enum Cars
{
    100,
    BMW,
    Ford
}; 
由于100不是有效的枚举名,因此您会看到此错误

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

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

尽管这样做时要小心,因为宝马和福特现在分别将它们的值设置为101102,所以如果这是在头文件中,您需要确保执行完整的重新编译。

我更喜欢保留宏并使用C++11的以下功能。
enum级轿车{奥迪=100,宝马,福特}

您使用了C++11功能,并将其转换为非功能。如果使用
枚举类
,则枚举数不会隐式转换为整数。因此,指定的值不重要。如果要将整数值显式分配给枚举数,请改用简单的
enum