class A {
public: enum class { HELLO, WORLD };
};
知道在
class
内部,声明一个简单的 enum
(而不是 enum class
)是一个更好的主意,因为它已经使用 class
标识进行了键入。但上面的声明仍然是有效的 C++0x
签名。现在如何访问外部未命名的enum class
?
int i = A::HELLO; // error: ‘HELLO’ is not a member of ‘A’
实际上,这是无效的。 C++0x FDIS 说 (9.2p1)
除非用于声明友元 (11.3) 或将基类成员的名称引入派生类 (7.3.3),成员声明声明类的成员,并且每个此类成员声明应在类的至少一个成员名称。
在您的情况下,类的作用域中没有引入枚举器名称,也没有引入枚举名称。因此,该成员声明根本没有引入任何成员名称。
编辑:实际上,对枚举声明有更直接的禁止。 7.2p2:
在作用域枚举的声明中不得省略可选的 identifier。