我有一个头文件,最终将包含多个枚举类。但是,当我将头文件包含在另一个文件中并尝试使用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!
}
有人知道如何正确执行此操作吗?我搜索了很多东西,却一无所获。
答案 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;
}