2013-08-12 29 views
0

我对编译我的MFC项目时遇到的这个错误感到有些困惑。为了简化,我要列举这样的事情:在enumurated数据类型中使用#define常量,语法错误

enum Cars 
{ 
Audi, 
Bmw, 
Ford 
}; 

,工作正常,但我得到的错误在编译的时候我定义任何的“汽车”,如:

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

的错误我得到的,无论是在头我写了这一点,并在源文件

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

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

错误C2059:语法错误:“}”

我不知道为什么我得到一个语法错误,因为这两个部分罚款分别编译。我知道我可以很容易地在枚举定义中定义奥迪= 100,但在我的实际项目中,我不能这么做。

回答

2

当你做一个定义它就像做一个搜索和替换为文本,然后编译发生,所以对你的例子,你现在有奥迪成为100让你的枚举看起来

enum Cars 
{ 
    100, 
    BMW, 
    Ford 
}; 

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

如果你想音频将要值100,你可以做

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

虽然这样做时,宝马和福特现在它们的值分别设置为101,102,所以你需要确保你做一个全面的重新编译要小心如果这是在一个头文件中。

-2

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

+0

您已经使用了C++ 11功能并将其转换为非功能部件。如果使用'enum class',枚举器不会隐式转换为整数。因此,分配的值不感兴趣。如果你想明确地分配整数值给枚举器,可以使用一个简单的'enum'。 – IInspectable