如何从另一个文件访问C ++ 11枚举类?

时间:2019-02-16 09:54:37

标签: c++ c++11 visual-c++ enums

我有一个头文件,最终将包含多个枚举类。但是,当我将头文件包含在另一个文件中并尝试使用enum类时,我的程序将无法编译。例如:

enums.h:

#ifndef ENUMS_H
#define ENUMS_H

enum class TokenType : char
{
     IDEN,
     STRING,
     SEMICO
};

#endif

和main.cpp:

#include <iostream>
#include "enums.h"

int main()
{
     char token = TokenType::STRING; //Does not compile!
}

但是,当我使用常规枚举时,它会正确编译:

enums.h:

#ifndef ENUMS_H
#define ENUMS_H

enum TokenType : char
{
     IDEN,
     STRING,
     SEMICO
}

#endif

和main.cpp:

#include <iostream>
#include "enums.h"

int main()
{
     char token = STRING; //This does compile!
}

有人知道如何正确执行此操作吗?我搜索了很多东西,却一无所获。

2 个答案:

答案 0 :(得分:3)

Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: Uncompilable source code - Erroneous sym type: javax.swing.JButton.addActionListener 不参与隐式转换,而无作用域的枚举则参与。因此,

enum class

将编译。

您可以看到How to automatically convert strongly typed enum into int?如何将int main() { TokenType token = TokenType::STRING; } 转换为其他值。

答案 1 :(得分:0)

Enum是强类型,如果不进行强制转换,则不能将枚举分配给int或char。 您可以尝试:

int main() 
{
  char token = (char)TokenType::STRING; 
}