2011-03-30 67 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

相关问题