多个枚举

时间:2019-01-23 22:53:58

标签: c++ enums

我想知道是否可以在已经存在的同一个文件中使用不同的枚举?

对于这个项目,我有一些元素可以作为许多书籍的类型。我想为这些书创建不同的故事,并为它们创建第二个枚举。

enum element {
    ICE, FIRE, EARTH, WIND, NONE
};
enum book stories {
    FK, IK, EK, WK, NONE
};

我的编译器会开始出现问题吗?

3 个答案:

答案 0 :(得分:2)

是的。枚举NONE同时出现在elementbook 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::NONEBookStories::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模块,请使用其他答案描述的枚举类。