Enum Форвардная декларация

Я пытаюсь правильно использовать форвардную декларацию для перечислений. Поэтому я искал в Интернете, но я не могу найти то, что работает.

Я использую в шапке:

// Forward declaration
enum myEnumProcessState;

Затем я использую это перечисление в структуре:

struct myStruct {
    [...]
    myEnumProcessState osState;
    [...]
};

И в другом заголовке:

enum myEnumProcessState {
    eNotRunning,
    eRunning
};

Я обнаружил, что тип должен быть помещен в декларацию enum для принятия. Однако я не знаю, какой "тип" я должен указать для состояния процесса. Это не работает:

enum myEnumProcessState : unsigned int;
enum myEnumProcessState : String; 

Я хотел пропустить предварительное объявление, но мой Struct плачет, потому что больше не может его найти...

Так что я немного растерялся. Вы знаете решение?

Большое спасибо:)

1 ответ

Решение

До C++11 C++ вообще не поддерживал предварительное объявление перечислений! Однако некоторые компиляторы (например, MS Visual Studio) предоставляют для этого языковые расширения.

Если ваш компилятор не поддерживает C++11, посмотрите в его документации объявления enum forward.

Если вы можете использовать C++11, есть enum class синтаксис (вы почти правильно поняли, но обратите внимание на дополнительные class ключевое слово:

// Forward declaration
enum class myEnumProcessState: unsigned int;

// Usage in a struct
struct myStruct {myEnumProcessState osState;};

// Full declaration in another header
enum class myEnumProcessState: unsigned int {
    eNotRunning,
    eRunning
};

// Usage of symbols (syntax may seem slightly unusual)
if (myObject.osState == myEnumProcessState::eNotRunning) {
    ...
}
Другие вопросы по тегам