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) {
...
}