2013-08-12 31 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