对于我的项目,我想扩大以前在基类中声明为受保护的枚举的可见性。
class A {
protected:
enum E { e = 0 };
};
class B : public A {
public:
using A::E;
};
int main()
{
B::E enum1; // okay
enum1 = B::e; // fails: test.cpp:3:14: error: A::E A::e is protected
}
原因很简单:
E
公开B
和A::E
我希望(编辑)代码编译得很好。
我很好奇。代码无法编译的科学解释是什么?
答案 0 :(得分:2)
公开A::E
不会影响枚举者的姓名,因此e
仍然受到保护。
尝试使用其他using
或将static const E e = A::e
添加到课程B
。
答案 1 :(得分:1)
这是使用C ++ 11的作用域语义的完美的C ++代码:
int main()
{
B::E enum1; // okay
enum1 = B::E::e; // also okay
}