我想知道是否可以在已经存在的同一个文件中使用不同的枚举?
对于这个项目,我有一些元素可以作为许多书籍的类型。我想为这些书创建不同的故事,并为它们创建第二个枚举。
enum element {
ICE, FIRE, EARTH, WIND, NONE
};
enum book stories {
FK, IK, EK, WK, NONE
};
我的编译器会开始出现问题吗?
答案 0 :(得分:2)
是的。枚举NONE
同时出现在element
和book stories
中(顺便说一句,您不能在枚举中用空格命名)。
如果要在两个枚举中都使用enum class
,请使用NONE
。
enum class element
{
ICE, FIRE, EARTH, WIND, NONE
};
enum class bookstories
{
FK, IK, EK, WK, NONE
};
然后您像这样使用枚举:
auto elem = element::NONE;
auto story = bookstories::NONE;
答案 1 :(得分:1)
撇开book stories
引起的语法错误,您可以通过将enum
声明放在范围内来使它们明确:
struct Elements {
enum element {
ICE, FIRE, EARTH, WIND, NONE
};
};
struct BookStories {
enum book_stories {
FK, IK, EK, WK, NONE
};
};
引用Elements::NONE
和BookStories::NONE
毫无疑问。
使枚举成为作用域的另一种方法是使用enum class
(自c ++ 11起):
enum class element {
ICE, FIRE, EARTH, WIND, NONE
};
enum class book_stories {
FK, IK, EK, WK, NONE
};
答案 2 :(得分:0)
这通常可以通过以下方法解决:
typedef enum element_e {
E_ELEMENT_ERROR = -1,
E_ELEMENT_NONE,
/* ... */
} element_t;
typedef enum bookstories_e {
E_BOOKSTORIES_ERROR = -1,
E_BOOKSTORIES_NONE,
/* ... */
} bookstories_t;
因此,您可以在头文件中维护C / C ++互操作。如果您没有任何C模块,请使用其他答案描述的枚举类。