2014-12-02 5 views
0

Как определить переменную LogLevel l?Использование перечисления в C++

В настоящее время у меня есть ошибка:

Error 3 error C2228: left of '.LogLevelDebug' must have class/struct/union 

Код:

typedef enum LogLevel 
{ 
    LogLevelDebug = 0, 
    LogLevelError = 1, 
    LogLevelInfo = 2, 
    LogLevelTrace = 3, 
} LogLevel; 



int main() 
{ 
logLevel l = LogLevel.LogLevelDebug; 
} 
+1

Я думаю, что «logLevel l» должен быть «LogLevel l»? Кроме того, этот вопрос, похоже, больше связан с перечислениями, чем с профсоюзами. – Serge

+2

Это перечисление, а не союз. Просто LogLevelDebug. – gnasher729

+0

Удалите 'typedef'. Это не нужно на C++, смущает людей и затрудняет работу, как вы узнали. –

ответ

3

В c++11 было бы:

enum class LogLevel 
{ 
LogLevelDebug = 0, 
LogLevelError = 1, 
LogLevelInfo = 2, 
LogLevelTrace = 3, 
}; 



int main() 
{ 
LogLevel l = LogLevel::LogLevelDebug; 
} 

в предыдущем C++ стандарт:

enum LogLevel 
{ 
    LogLevelDebug = 0, 
    LogLevelError = 1, 
    LogLevelInfo = 2, 
    LogLevelTrace = 3, 
}; 

int main() 
{ 
    LogLevel l = LogLevelDebug; 
} 
+2

О, боже мой, я был на C# так долго, я забыл о: – Serge

+0

Последнее, что я прочитал, даже в C++ 03 'enum' можно читать как правовую область на их именах (то есть, LogLevel: : LogLevelDebug' может быть законным в C++ 03). Что-то о том, что 'enum' является частью более общего класса вещей ... Думаю, это имеет большее значение, если ваш компилятор и потенциальные компиляторы будущего поддерживают его. – Yakk

Смежные вопросы