无法使用static_cast将枚举类转换为int

时间:2013-12-25 14:42:28

标签: c++ gcc c++11 enums

enum class TestEnum : int
{
    first,
    second
};

int main()
{
    int n = static_cast<int>(TestEnum::second);   // error
    return 0;
}

构建日志:

g++ -O0 -g3 -Wall -c -fmessage-length=0 -std=c++0x -MMD -MP -MF"src/test.d" -MT"src/test.d" -o "src/test.o" "../src/test.cpp"
../src/test.cpp: In function ‘int main()’:
../src/test.cpp:20:20: error: cannot convert ‘TestEnum’ to ‘int’ in initialization

gcc版本4.6.3

如何将enum class个实例转换为int

2 个答案:

答案 0 :(得分:2)

您正尝试使用-std=c++0x密钥编译代码。但强类型枚举enum class是C ++ 11的一个特性,因此您最好使用较新的GCC编译器。 GCC 4.7或更高版本是合适的,它具有-std=c++11命令行密钥:http://gcc.gnu.org/projects/cxx0x.html

此代码有效:http://ideone.com/4IQPUx

答案 1 :(得分:0)

将编译器升级到4.7并使用-std = c ++ 11或-std = gnu ++ 11而不是-std = c ++ 0x。 范围枚举仅适用于-std = c ++ 11或-std = gnu ++ 11