【问题标题】:Error in creating a new type in c++在 C++ 中创建新类型时出错
【发布时间】:2015-05-30 10:06:04
【问题描述】:

我刚开始学习c++,在这个简单的代码中我遇到了以下问题:

enum class color_type {green,red,black};

color_type color(color_type::red);

我收到错误“color_type 不是类或命名空间”。我的目标是创建一个 color_type 类型的变量,它只能取红色、黑色和绿色的值。请你帮助我好吗?谢谢

【问题讨论】:

  • 我无法从您的示例中重现此错误:ideone.com/WVjvKq?
  • 对我来说看起来不错,碰巧你使用的是什么编译器/IDE?
  • 在您的实际代码中仔细检查拼写。你放在这里的代码没有问题:)
  • 这就是你的 IDE。编译器列在项目选项的工具链下。

标签: c++ class enums


【解决方案1】:

对我来说,您的代码看起来像是有效的 c++11。

如果你的编译器不支持 c++11,那么你可以模拟一个带有命名空间或结构的枚举类

 struct colour_type
 {
      enum value
      {
            red, 
            green,
            blue
      }
 }

 //usage is like so
 colour_type::value myColour = colour_type::red;

它并不完美,但它将枚举保持在自己的范围内。

【讨论】:

  • 非常感谢。我启用了对 c++11 的支持,它现在可以工作了!
【解决方案2】:

您的编译器似乎不支持无范围枚举器的限定名称(我的意思是您在其版本之前的帖子显示无范围枚举时)。简单写

enum color_type {green,red,back};
color_type color(red);

或者您可以使用范围枚举,例如

enum class color_type {green,red,back};
color_type color(color_type::red);

事实上这些声明

enum color_type {green,red,back};
color_type color(color_type::red);

根据当前的 C++ 标准是正确的。

【讨论】:

  • 我认为,c++11 需要指定enum class 的范围,不是吗?它也不能在带有 c++11 的 g++ 4.9.2 上编译,所以你可能是错的,我是对的 :)
  • @Victor Polevoy 您可以使用限定名称和无范围的枚举数。
  • 非常感谢。我正在使用 code::blocks 并且没有启用对 c++11 的支持。现在可以了!
猜你喜欢
  • 2013-01-07
  • 2013-05-10
  • 2015-12-15
  • 2019-02-26
  • 2022-08-18
  • 2015-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多