【发布时间】:2015-12-28 15:56:47
【问题描述】:
我在使用多重继承用例时遇到了问题(这不是我的项目,我没有决定继承方案,抱歉)。无论如何,我似乎无法从覆盖函数调用受保护的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 的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();
^
即使我将所有foos 公开,我仍然会看到这一点。怎么了?
【问题讨论】:
-
在 MSVC 中工作。你用的是什么编译器?看起来它认为
AB::foo()不是AB的成员,请仔细检查您的非简化版本中的签名是否相同.. -
是的,在 MSVC 中编译得很好!请说明编译器、版本和任何编译器标志(如果您正在使用)。
-
我意识到我打错了 --
void foo()和void AB::foo()非常不同!
标签: c++ inheritance multiple-inheritance virtual-inheritance