C++ 无法使用静态强制转换将枚举类转换为int

C++ 无法使用静态强制转换将枚举类转换为int,c++,gcc,c++11,enums,C++,Gcc,C++11,Enums,gcc版本4.6.3 如何将枚举类实例转换为int?您正试图使用-std=c++0x键编译代码。但是强类型枚举enum类是C++11的一个特性,因此您最好使用更新的GCC编译器。GCC 4.7或更高版本适用,它具有-std=c++11命令行键: 此代码有效:将编译器升级到4.7,并使用-std=c++11或-std=gnu++11代替-std=c++0x。 作用域枚举仅适用于-std=c++11或-std=gnu++11问题是什么?顺便说一句,这是在GCC4.8.1和Clang3.3上编译的。这

gcc版本4.6.3


如何将枚举类实例转换为
int

您正试图使用
-std=c++0x
键编译代码。但是强类型枚举
enum类
是C++11的一个特性,因此您最好使用更新的GCC编译器。GCC 4.7或更高版本适用,它具有
-std=c++11
命令行键:


此代码有效:

将编译器升级到4.7,并使用-std=c++11或-std=gnu++11代替-std=c++0x。
作用域枚举仅适用于-std=c++11或-std=gnu++11

问题是什么?顺便说一句,这是在GCC4.8.1和Clang3.3上编译的。这应该可以工作。考虑更新编译器,或者只是编写自己的转换函数。这个答案混淆了两个问题。C++11的特定方面是否在GCC上工作与
std
标志是
C++0x
C++11
没有直接关系。这仅仅是一个什么时候添加了对该特性的支持,以及相关bug得到修复的问题。在只支持
C++0x
标志的编译器版本上,有大量的C++11功能可用。
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