标题说明了一切,但我举一个例子:
class A {
public:
enum A
{
enumVal1,
enumVal2
};
enum B
{
enumVal1,
enumVal3,
};
};
我可以做些什么呢?
提前致谢。
答案 0 :(得分:4)
C ++不允许您在同一范围内拥有两个相同的标识符。您可以添加前缀以使其清晰:
enum A
{
A_enumVal1,
A_enumVal2
};
enum B
{
B_enumVal1,
B_enumVal3
};
或者您可以将每个枚举放在不同的namespace中并使用A::enumVal1
,B::enumVal1
等。命名空间旨在解决此类问题。
答案 1 :(得分:4)
在c++ 11
中,您可以使用enum class
:
class MyClass {
public:
enum class A
{
enumVal1,
enumVal2
};
enum class B
{
enumVal1,
enumVal3,
};
};
比你引用的值为:
MyClass::A::enumVal1
MyClass::B::enumVal1
使用enum classes
代替旧枚举也可以为您提供强大的输入。您可以详细了解enum classes
here
答案 2 :(得分:1)
C ++ 11具有范围的枚举:
class S {
public:
enum class A
{
enumVal1,
enumVal2
};
enum class B
{
enumVal1,
enumVal3,
};
};
然后,您需要引用A::enumVal1
和B::enumVal1
。即使没有歧义,enumVal2
也必须是合格的。此外,枚举器不会像旧样式那样隐式地转换为int
;你需要static_cast
。
这只是简化C ++ 03习语:
class S {
public:
struct A { enum type
{
enumVal1,
enumVal2
} value; };
struct B { enum type
{
enumVal1,
enumVal3,
} value; };
};
然后,您需要声明A::type
和B::type
类型的对象,或者引用.value
的{{1}}成员。 (其他方法也是可能的。)