类名和枚举值之间的冲突:没有命名空间的可解析?

时间:2012-11-27 20:30:16

标签: c++ enums namespaces name-clash

class cippa{};

enum close{ cippa };

int main(){
    new cippa();    //bad here
}

使用::cippa也无济于事。有没有办法解决这个问题,而无需将enumclass放在单独的namespace中?

2 个答案:

答案 0 :(得分:4)

使用new class cippa消除歧义。如果在同一范围内声明了类名和枚举器(或函数/变量)名称,则隐藏类名。您可以class name访问它。如果类型名称是枚举名称,则相同。您可以通过enum name

访问该帐户
#include <unistd.h>

// oops, close is now hidden! but we know a trick..
enum close c = cippa;

答案 1 :(得分:1)

使用C ++ 11,如果你这样做

class cippa;
enum class close { cippa };

然后课程cippa和枚举值close::cippa不会发生冲突。

顺便说一下

class close{
public:
  enum enum_t{cippa};
};

但是,您需要使用close代替close::enum_t来访问枚举类型。 close::cippa保持不变。