【问题标题】:Cannot convert enum class to int using static_cast无法使用 static_cast 将枚举类转换为 int
【发布时间】:2013-12-25 14:42:28
【问题描述】:
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

【问题讨论】:

  • 问题是什么?顺便说一句,这在 GCC 4.8.1 和 clang 3.3 上编译。
  • 这应该可以。考虑更新你的编译器,或者只是编写你自己的转换函数。

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


【解决方案1】:

您正在尝试使用 -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

【讨论】:

  • 这个答案混淆了两个问题。 C++11 的某个特定方面是否适用于 GCC 与 std 标志为 C++0xC++11 没有直接关系。这只是何时添加对该功能的支持以及修复相关错误的问题。有很多 C++11 功能适用于仅支持 C++0x 标志的编译器版本。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2010-09-06
    相关资源
    最近更新 更多