标题说明了一切,但我在这里举一个例子:
class A {
public:
enum A
{
enumVal1,
enumVal2
};
enum B
{
enumVal1,
enumVal3,
};
};
我该怎么做才能起作用?
提前致谢。
C++ 不允许您在同一范围内拥有两个相同的标识符。您可以添加一个前缀以使其清楚:
enum A
{
A_enumVal1,
A_enumVal2
};
enum B
{
B_enumVal1,
B_enumVal3
};
或者您可以将每个枚举放在不同的命名空间中并使用A::enumVal1
,B::enumVal1
等。命名空间旨在解决此类问题。
在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
C++11 有范围枚举:
class S {
public:
enum class A
{
enumVal1,
enumVal2
};
enum class B
{
enumVal1,
enumVal3,
};
};
然后你需要参考A::enumVal1
and 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; };
};
然后您需要声明 and 类型的对象A::type
,或者B::type
引用.value
. struct A
(其他方法也是可能的。)