编辑:好的,对不起各位。虚惊。这是 Intellisense 告诉我这是错误的,但是当我将其提取到可编译文件中时,它编译正常(即使 Intellisense 仍然提示)。
我正在使用 Microsoft Visual Studio 2013 编译具有某些内部状态的 C++ 类; (比方说)颜色 和纹理。每个都有有限数量的有效值,所以我使用了很好的旧类型安全枚举,并且因为每个枚举都包含一个 None
值,所以我使用了新的 C++/11 语法; enum class
,因此枚举数将限定为枚举类型,而不是包含类:
Color
和 Texture
类型是实现细节,所以我不想将它们公开,但将它们设为私有(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/