我有以下类结构:
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 https://isocpp.org/wiki/faq/multiple-inheritance(你的情况类似于“可怕的钻石”)。
您需要添加关键字virtual
当您从接口继承类时。您还需要添加virtual
当您从 Interface 继承 Interface 时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)