2014-12-02 56 views
0

如何定義LogLevel變量l?在C++中使用enum

目前,我有錯誤:

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 2014-12-02 17:31:31

+2

這是一個枚舉,而不是一個聯盟。只是LogLevelDebug。 – gnasher729 2014-12-02 17:31:42

+0

刪除'typedef'。正如你發現的那樣,C++並不需要它,讓人困惑並且讓事情變得困難。 – 2014-12-02 18:09:47

回答

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 2014-12-02 17:34:39

+0

最後我讀了,即使在C++中也可以讀取'enum's作爲他們名字的合法範圍(例如'LogLevel: :LogLevelDebug'在C++ 03中可能是合法的)。關於'enum'的東西是更普通類的一部分......如果你的編譯器和潛在的未來編譯器支持它,那麼我認爲它更重要。 – Yakk 2014-12-02 18:29:54