我遇到了多继承用例的问题(这不是我的项目,我没有决定继承方案,抱歉)。无论如何,我似乎无法从覆盖函数调用受保护的virtual
成员函数。这是一个简化的类结构:
class Base {
protected:
virtual void foo() { }
};
class A: virtual public Base {
protected:
virtual void foo();
};
void A::foo() { printf("Hello A\n"); }
class B: virtual public Base {
protected:
virtual void foo();
};
void B::foo() { printf("Hello B\n"); }
class AB: public A, public B {
protected:
void foo();
};
void AB::foo()
{
A::foo();
B::foo();
}
我希望如果我拨打AB
的{{1}},我会得到类似
foo()
然而,当我编译时,我得到一个错误,如:
Hello A
Hello B
即使我将所有error #308: function "A::foo" is inaccessible
A::foo();
^
error: a nonstatic member reference must be relative to a specific object
A::foo();
^
error #308: function "B::foo" is inaccessible
B::foo();
^
error: a nonstatic member reference must be relative to a specific object
B::foo();
^
公开,我仍然会看到这一点。怎么了?
答案 0 :(得分:0)
特定对象可以是*this
,因此this->A::foo()
和this->B::foo()
。
答案 1 :(得分:0)
我没有在正确的命名空间中定义我的函数。 void foo()
和void AB::foo()
非常不同!