C++ 不同的枚举,相同的值

C++ 不同的枚举,相同的值,c++,enumeration,C++,Enumeration,是否可以使用相同的值创建两个不同的枚举? 比如说, enum direction{ LEFT, RIGHT, UP, DOWN, NONE } enum color{ RED, GREEN, BLUE, NONE } 编译器会说有两个“NONE”声明。 有办法吗?有两种办法。一种方法是使用名称空间包装枚举并防止值污染全局名称空间: namespace direction { enum direction {

是否可以使用相同的值创建两个不同的枚举? 比如说,

enum direction{
    LEFT,
    RIGHT,
    UP,
    DOWN,
    NONE
}
enum color{
   RED,
   GREEN,
   BLUE,
   NONE
}
编译器会说有两个“NONE”声明。
有办法吗?

有两种办法。一种方法是使用名称空间包装枚举并防止值污染全局名称空间:

namespace direction {
    enum direction {
        LEFT,
        RIGHT,
        UP,
        DOWN,
        NONE
    };
}
namespace color {
    enum color {
       RED,
       GREEN,
       BLUE,
       NONE
    };
}
您还可以使用新的C++11方式(如果您的编译器支持),并使用“强类型枚举”

语法
direction::NONE
color::NONE
都可以使用这两种方法,但有一个主要区别。在第一种情况下,枚举仍将隐式转换为int。这意味着你可以写作

intfoo=方向::无

一切都很好

在第二种情况下,这将是一个编译器错误,因为foo与direction的类型不同。你可以通过这样做来解决这个问题

direction foo=方向::无


这可能对你有用,也可能不对。如果您需要将其转换为int,欢迎使用
static\u cast(foo)
来获得整数类型。

谢谢,第一种方法对于我现在所做的工作似乎更有效,所以我将坚持使用它。
enum class direction {
    LEFT,
    RIGHT,
    UP,
    DOWN,
    NONE
};
enum class color {
   RED,
   GREEN,
   BLUE,
   NONE
};