在遗留数据类型中使用#define常量,语法错误

时间:2013-08-12 07:43:43

标签: visual-c++ enums mfc c-preprocessor

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

enum Cars
{
Audi,
Bmw,
Ford
};

哪个工作正常,但在我定义任何'汽车'时编译错误,如:

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

我得到的错误都在我写的标题和源文件

  

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

     

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

     

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

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

2 个答案:

答案 0 :(得分:2)

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

enum Cars
{
    100,
    BMW,
    Ford
}; 

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

如果您希望音频值为100,则可以

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

虽然在执行此操作时要小心,因为宝马和福特现在的值分别设置为101,102,因此如果这是在头文件中,您需要确保完全重新编译。

答案 1 :(得分:-2)

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