【问题标题】:Compilation errors when using explicitly-typed enum classes in bitfields (gcc C++0x/C++11)在位域中使用显式类型枚举类时的编译错误 (gcc C++0x/C++11)
【发布时间】:2012-11-06 10:11:29
【问题描述】:

在过去的三个月里,我一直很高兴地用 GCC 编译我的代码,直到我重建了我的交叉编译器,那时我发现自己收到消息“错误:位域'...' -整体型”。

一个有问题的枚举示例如下:

typedef unsigned char byte;

enum class opStatus : byte
{
    /* Process has yet to begin execution */
    Ready,
    /* Process can resume execution */
    Started,
    /* Process has completed */
    Finished,
    /* Process is handling shutdown */
    Finishing,
};

struct // Example usage
{
    opStatus Status : 2;
};

为什么会这样?

【问题讨论】:

  • 也许你破坏了你的交叉编译器,或者忘记构建 C++11 支持。没有看到你实际做了什么,也不知道你的编译器是什么,这里没什么好说的。
  • GNU GCC G++ 4.6.0 使用配置 C++0x。而且我已经多次使用新的资源重新构建了编译器。
  • 由于这似乎是由您的交叉编译器引起的问题,因此该编译器的代码将有助于回答这个问题。
  • 请注意,代码struct { opStatus Status : 2; }; 无论如何都会给出编译错误,即使opStatus Status : 2 在语言中是允许的!您必须在声明中至少介绍一个名称。所以写struct tag_name { opStatus Status : 2; };struct { opStatus Status : 2; } object_name;
  • 试着想出一个SSCCE

标签: c++ class enums bit-fields


【解决方案1】:

将位宽设为 8。毕竟它是一个字节。

一旦我这样做了(并为结构添加了一个名称),

g++ -std=c++11 

没有给我任何警告或错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-25
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多