以下代码无法在GCC 4.9.1中编译:
class A
{
protected:
virtual void f() {}
};
class B : public A
{
protected:
virtual void f() override { A* a = new A; a->f(); }
};
我得到以下内容:
header.h: In member function 'virtual void B::f()':
header.h:51:17: error: 'virtual void A::f()' is protected
我原本希望这可以编译。
为什么会失败?有没有比制作f()更好的方法?
答案 0 :(得分:1)
答案 1 :(得分:1)
由于B
从该类继承,因此不能在类的不同实例或父类的实例之间交叉调用受保护的方法。
无论如何B
已经是A
您打算致电A::f();
吗?
class B : public A {
protected:
virtual void f() override { A::f(); /* ... whatever ... */ }
};