2012-05-02 5 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가 compiler- ++에 : 위의 2 행에 error C2365: 'UNKNOWN' : redefinition; previous definition was 'enumerator'. 이 작업을 수행하는 올바른 방법이 있습니까? 아니면 항상 고유 한 열거 형 값을 사용해야합니까? 나는 다른 누군가의 코드를 포함하고 있다면 이것이 항상 보장 될 수 있다고 상상할 수 없다.

답변

15

당신은, 그리고하는 namespace에 열거를 포함해야 할 수 있습니다

C++ (11)를 사용하는 사람들을 위해
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

, 당신이 사용하는 것이 좋습니다 : 대신의

enum class Foo 

:

enum Foo 

이 방법은 네임 스페이스와 비슷한 구문과 이점을 제공합니다. 귀하의 경우 구문은 다음과 같습니다.

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

이 형식은 강력하게 입력되므로 int (또는 다른 것)로 수동 변환해야합니다.