Многочисленные перечисления - PullRequest
0 голосов
/ 24 января 2019

Мне было интересно, смогу ли я использовать разные перечисления в одном и том же файле, где он уже присутствует?

Для этого проекта у меня есть элементы, которые выступают в качестве жанра для ряда книг.Я хочу создать разные истории для книг и создать для них второе перечисление.

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

это может вызвать проблемы с моим компилятором?

Ответы [ 3 ]

0 голосов
/ 24 января 2019

Обычно это решается следующим образом:

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, используйте перечислимые классы, как описано в других ответах.

0 голосов
/ 24 января 2019

Оставляя в стороне синтаксическую ошибку, вызванную 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
};
0 голосов
/ 24 января 2019

Да. Перечисление NONE присутствует как в element, так и в book stories (кстати, вы не можете назвать свои перечисления с пробелом внутри).

enum class

Используйте enum class es, если хотите использовать 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...