2011-03-30 66 views
1

我想定義我自己的枚舉類型:ExitType。我這樣寫:我可以取消定義EXIT_SUCCESS嗎?

enum ExitType{ 
    EXIT_SUCCESS, 
    EXIT_FAILURE, 
    EXIT_OTHERTYPE 
    }; 

我有一個函數返回一個ExitType。在某些情況下,它返回EXIT_SUCCESS。但是我得到的錯誤消息是你不能從int轉換到ExitType。我可以爲我的IDE取消定義EXIT_SUCCESS,還是我使用static_cast<int>(EXIT_SUCCESS)卡住了?它似乎介紹了他們的EXIT_SUCCESS將與我的EXIT_OTHERTYPE排隊等的可能性。

我正在使用Eclipse Helios CDT,MinGW32和SDL。所有32位和最新版本。

編輯:嘗試用預處理器取消定義EXIT_SUCCESS。

#undef EXIT_SUCCESS 
#undef EXIT_FAILURE 

enum ExitType{ 
    EXIT_SUCCESS, 
    EXIT_FAILURE, 
    EXIT_OTHERTYPE, 
    EXIT_NOEXIT 
}; 

結果:
.. \ SRC \ EventManager.cpp:12:7:錯誤:從 '詮釋' 到 'ExitType'

編輯2無效轉換:當我移動取消定義在包含<SDL/SDL.h>後,錯誤消失。儘管如此,SDL代碼的GREP卻沒有出現與EXIT_SUCCESS匹配的任何內容。

+0

EXIT_SUCCESS在stdlib.h中定義。這似乎不是你的問題,但。你的錯誤說你不能隱式地轉換成ExitType(這是正確的,該轉換需要顯式轉換)。從ExitType到int的轉換可以隱式完成。 – 2011-03-30 01:26:02

+0

請注意,如果由於與「EXIT_SUCCESS」和「EXIT_FAILURE」的衝突而無法使用「」,那麼您將無法讓其他人使用您的代碼。在短期內這對你來說可能並不重要,但不要養成它的習慣。或者,IOW,重新定義標準名稱是一個壞主意。 – 2011-03-30 01:52:44

回答

2

#undef EXIT_SUCCESS應該取消定義預處理器符號EXIT_SUCCESS,這正是我所假設的。但只有在你確定你不會因爲這樣做而破壞任何東西的情況下才這麼做!

+0

感謝您的建議!我會繼續研究該項目,看看是否有任何問題出現。 – AngryPuffin 2011-03-30 01:23:12

+0

一般來說,沒有什麼東西可能會出現中斷...因爲EXIT_SUCCESS作爲預處理器符號很可能被定義爲int「0」...並且枚舉可以衰減爲整數...並且您的EXIT_SUCCESS是第一個值在你的枚舉中......這意味着它的整數值是0 ......這意味着什麼都不會真的改變! 假設你使用C++編程,你可以通過將枚舉包裝在命名空間中避免這種情況 – 2011-03-30 04:05:21

相關問題