我具有以下类结构:

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

09-18 19:59