c++ - 无法访问嵌套私有(private)枚举的枚举数

标签 c++ c++11 enums

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


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

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

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 是一个私有(private)嵌套的 class 定义,我可以在内部类中包含一个 'friend class MyClass' 声明,但是这样的语法似乎对一个枚举。

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

最佳答案

你的代码没问题!

看来你的IDE不支持C++11

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

关于c++ - 无法访问嵌套私有(private)枚举的枚举数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30655819/

相关文章:

java - 尝试用Java中的枚举替换switch语句

c++ - 如何使用 std::ifstream 读取使用 QDataStream 编写的二进制文件

c++ - 具有相互独立线程的多线程开销

c++ - 如何获取C++11参数包中的类型?

c++ - Qt:如何使用 Qt 智能指针

java - 为什么 Java 在只识别最后一个时允许引用两个(或更多)枚举?

enums - 在枚举上检查PartialEq,而不检查变体的附加数据

c++ - C++CLI 的 *var* 关键字

C++ 在 'std::cin' 中不匹配 'operator>>'

c++ - 将 std::string 转换为 v8::string,反之亦然?