【问题标题】:Enum declaration in EclipseEclipse 中的枚举声明
【发布时间】:2023-10-17 05:18:01
【问题描述】:

我正在 Eclipse、Linux 中编译一个 c++ 项目。

该项目过去是在 Windows 中编译的。

我有这样的枚举声明:

enum nameofenum:UINT32
{
  one=0,
  two=1
}

结果是eclipse出错了。

  1. :UINT32是什么意思?
  2. 如何将此声明切换到 Linux?

谢谢!!

【问题讨论】:

  • 请通过选择代码并按 CTRL+K 来格式化您的代码。使用预览!

标签: c++ linux eclipse enums


【解决方案1】:

这看起来像 strongly typed enum,这是 C++0x 的一个特性。基本上,它指定了枚举的底层类型,所以onetwo 将是UINT32s。

要编译它,您需要一个支持 C++0x 语言特定部分的编译器。我相信GCC 4.4Visual C++ 在一定程度上支持强类型枚举。

【讨论】:

    【解决方案2】:

    : UINT32 声明了枚举的底层类型;这意味着枚举将由UINT32 表示。

    这是 C++0x 中添加的新 C++ 功能,称为强类型枚举。 Visual C++ 至少从 Visual C++ 2005 开始就支持它;您使用的 g++ 版本可能不支持。

    至于如何使用 g++ 来实现这一点,这取决于。如果您没有任何依赖于特定基础类型的代码,那么您可以将其删除。如果您确实有依赖于特定基础类型的代码,您可以考虑将枚举类型的使用替换为基础类型(即,使用UINT32 而不是nameofenum);不过,这不是很好。

    【讨论】:

      【解决方案3】:
      1. UINT32 是无符号的 32 位整数,因此您的枚举由 4bytes int 表示。
      2. 视情况而定。我不确切知道,但是您真的需要将此枚举用作 32 位 int 吗?也许你可以避免这个 :UINT32 声明?

      【讨论】:

        【解决方案4】:

        : UINT 表示枚举标识符的底层类型是UINT。 它是描述为here 的Microsoft 扩展。要使其编译删除: UINT

        【讨论】:

          最近更新 更多