【问题标题】:Can't access enumerands of nested private enum无法访问嵌套私有枚举的枚举数
【发布时间】:2015-06-04 23:19:57
【问题描述】:

编辑:好的,对不起各位。虚惊。这是 Intellisense 告诉我这是错误的,但是当我将其提取到可编译文件中时,它编译得很好(即使 Intellisense 仍然抱怨)。


我正在使用 Microsoft Visual Studio 2013 编译具有某些内部状态的 C++ 类; (比方说)颜色纹理。每个都有有限数量的有效值,所以我使用了良好的旧类型安全枚举,并且因为每个枚举都包含一个 None 值,所以我使用新的 C++/11 语法; enum class,所以枚举数将被限定为枚举类型而不是包含类:

ColorTexture 类型是实现细节,所以我不希望将它们公开,但将它们设为私有会阻止我访问任何枚举数。

class MyClass
{
private:
    enum class Color {
        None, Red, Green
    } _color;

    enum class Texture {
        None, Smooth, Rough
    } _texture;

public:
    MyClass()
        : _color(Color::Green)
                 ---------- <== ERROR: Member is inaccessible
        , _texture(Texture::Rough)
                   -------------- <== ERROR: Member is inaccessible
    {
    }
};

如果Color 是一个私有嵌套class 定义,我可以在内部类中包含一个'friend class MyClass' 声明,但似乎没有这样的语法对枚举有效。 p>

有人可以解释为什么这不起作用,以及它是如何应该完成的?

【问题讨论】:

标签: c++ c++11 enums


【解决方案1】:

你的代码没问题!

您的 IDE 似乎不支持 C++11

尝试在您的 IDE 上启用 C++11

【讨论】:

  • 如果它不支持 C++11,那么 enum class 就会失败。
  • 枚举类发出警告。我已经编译了代码,没问题!
  • You 编译了代码,但没有编译 OP。他可能正在使用不同的编译器。而且我不明白使用enum class 是如何发出警告的。
猜你喜欢
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多