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