我具有以下类结构:
class InterfaceA
{
virtual void methodA =0;
}
class ClassA : public InterfaceA
{
void methodA();
}
class InterfaceB : public InterfaceA
{
virtual void methodB =0;
}
class ClassAB : public ClassA, public InterfaceB
{
void methodB();
}
现在,以下代码不可编译:
int main()
{
InterfaceB* test = new ClassAB();
test->methodA();
}
编译器说
methodA()
方法是虚拟的,尚未实现。我认为这是在ClassA
(实现InterfaceA
)中实现的。有人知道我的错在哪里吗?
最佳答案
那是因为您有InterfaceA
的两个副本。参见以下内容以获得更大的解释:https://isocpp.org/wiki/faq/multiple-inheritance(您的情况类似于“可怕的钻石”)。
从InterfaceA继承ClassA时,需要添加关键字virtual
。从InterfaceA继承InterfaceB时,还需要添加virtual
。