2012-05-02 109 views
13

有没有办法在不同的类型中重用相同的枚举值?我希望能像下面这样:在单独的枚举类型中重用枚举值

enum DeviceState { UNKNOWN, ACTIVE, DISABLED, NOTPRESENT, UNPLUGGED }; 
enum DeviceType { UNKNOWN, PLAYBACK, RECORDING }; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    DeviceState deviceState = DeviceState::UNKNOWN; 
    DeviceType deviceType = DeviceType::UNKNOWN; 
    return 0; 
} 

这对我来说很有意义,而不是C++的反编译它抱怨:error C2365: 'UNKNOWN' : redefinition; previous definition was 'enumerator'以上的2号线。有没有这样做的正确方法,或者我应该总是使用独特的枚举值?我无法想象,如果我包含别人的代码,这总是可以保证。

回答

15

可以,而且应该包括你的枚举在namespace

namespace DeviceState 
{ 
    enum DeviceState{ UNKNOWN, ACTIVE, DISABLED, NOTPRESENT, UNPLUGGED }; 
} 
namespace DeviceType 
{ 
    enum DeviceType{ UNKNOWN, PLAYBACK, RECORDING }; 
} 

//... 

DeviceType::DeviceType x = DeviceType::UNKNOWN; 
+0

谢谢Luchian。请你能帮我纠正我的例子。如上所述,我不确定如何使用名称空间声明变量。 –

+0

@IAmAI所以我发布的代码不起作用? –

+0

如果我声明一个变量为'DeviceState deviceState = DeviceState :: UNKNOWN;',我得到一个编译器错误:''DeviceState':非法使用表达式中的名称空间标识符 –

20

对于使用C++ 11的,你可能更愿意使用:

enum class Foo 

,而不只是:

enum Foo 

这提供了与命名空间相似的语法和好处。在你的情况下,语法是:

enum class DeviceState { UNKNOWN, ACTIVE, DISABLED, NOTPRESENT, UNPLUGGED }; 
DeviceState deviceState = DeviceState::UNKNOWN; 

注意,这是强类型,所以你需要手动将它们转换成整数(或其他任何东西)。