标题说明了所有内容,但我在此处举例说明:

class A {
public:
  enum A
  {
    enumVal1,
    enumVal2
  };

  enum B
  {
    enumVal1,
    enumVal3,
  };
};

我必须怎么做才能使它起作用?

提前致谢。

最佳答案

C++ 11具有范围内的枚举:

class S {
public:
  enum class A
  {
    enumVal1,
    enumVal2
  };

  enum class B
  {
    enumVal1,
    enumVal3,
  };
};

然后,您需要引用A::enumVal1B::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::typeB::type类型的对象,或者引用.valuestruct A成员。 (其他方法也是可能的。)

10-01 12:01