2013-09-25 3 views
2

동일한 값을 갖는 두 개의 서로 다른 열거 형을 만들 수 있습니까? 예를 들어 ,다른 열거 형, 같은 값

enum direction{ 
    LEFT, 
    RIGHT, 
    UP, 
    DOWN, 
    NONE 
} 
enum color{ 
    RED, 
    GREEN, 
    BLUE, 
    NONE 
} 

컴파일러는 'NONE'의 두 선언이 있다는 것을 말할 것입니다. 이 문제를 해결할 방법이 있습니까?

답변

8

여기에는 몇 가지 방법이 있습니다. 한 가지 방법은 열거 형 랩 및 글로벌 네임 스페이스 오염의 값을 방지하기 위해 네임 스페이스를 사용하는 것입니다 (컴파일러가 지원하는 경우)

namespace direction { 
    enum direction { 
     LEFT, 
     RIGHT, 
     UP, 
     DOWN, 
     NONE 
    }; 
} 
namespace color { 
    enum color { 
     RED, 
     GREEN, 
     BLUE, 
     NONE 
    }; 
} 

당신은 또한 새로운 C++ (11)의 방법을 사용할 수 있습니다 및 사용 "강력한 형식의 열거는 "

enum class direction { 
    LEFT, 
    RIGHT, 
    UP, 
    DOWN, 
    NONE 
}; 
enum class color { 
    RED, 
    GREEN, 
    BLUE, 
    NONE 
}; 

은 구문 direction::NONE 또는 color::NONE에 의해 사용될 수 있지만, 한 가지 중요한 차이가있다. 첫 번째 경우 열거 형은 여전히 ​​암시 적으로 int로 캐스팅됩니다. 이것은 당신이

int foo = direction::NONE;

을 쓸 수 있다는 것을 의미 모든 것이 괜찮습니다.

foo가 방향과 동일한 유형이 아니기 때문에 두 번째 경우 컴파일러 오류가 발생합니다. 당신은 또는 당신을 위해 작동하지 않을 수도 있습니다

direction foo = direction::NONE;

을 수행하면이 문제를 해결할 수 있습니다. 그것을 int로 형변환해야한다면, static_cast<int>(foo)을 사용하여 정수형을 얻을 수 있습니다.

+0

감사합니다. 첫 번째 방법은 지금 당장 만들고있는 것에 더 효율적으로 보이므로 계속 사용하겠습니다. – JorensM