是否可以制作两个具有相同值的不同枚举? 例如,
enum direction{
LEFT,
RIGHT,
UP,
DOWN,
NONE
}
enum color{
RED,
GREEN,
BLUE,
NONE
}
编译器会说有两个'NONE'声明。 有办法解决这个问题吗?
答案 0 :(得分:9)
有很多方法可以解决这个问题。一种方法是使用命名空间来包装枚举并防止值污染全局命名空间:
namespace direction {
enum direction {
LEFT,
RIGHT,
UP,
DOWN,
NONE
};
}
namespace color {
enum color {
RED,
GREEN,
BLUE,
NONE
};
}
您也可以使用新的C ++ 11方式(如果您的编译器支持它)并使用“强类型枚举”
enum class direction {
LEFT,
RIGHT,
UP,
DOWN,
NONE
};
enum class color {
RED,
GREEN,
BLUE,
NONE
};
两者都可以由语法direction::NONE
或color::NONE
使用,但有一个主要区别。在第一种情况下,枚举仍然会隐式地转换为整数。这意味着你可以写
int foo = direction::NONE;
一切都很好。
在第二种情况下,这将是编译器错误,因为foo与方向的类型不同。你可以通过
解决这个问题 direction foo = direction::NONE;
可能适用于您,也可能不适合您。如果需要将其强制转换为int,欢迎使用static_cast<int>(foo)
来获取整数类型。