模棱两可的方法编译错误

Ambiguous method compilation error

我有以下代码涉及三个 类 A,B,C 文件 A.pp 在调用继承方法 doWhat() 时未编译并出现错误 'ambigous call' 问题的原因是什么?我该如何避免呢?

A.h

#include "B.h
class A: public B, C{
 virtual void doThings(C* c);
}

A.cpp

void doThings(C* c){
   this->doWhat();    //Compilation  Error doWhat call is ambigous!
}

B.h

class C; //forward declaration 
class B{
    public:
    virtual void doThings(C* c) = 0;
}

C.h

#include "B.h"

class C{
public:
   virtual void doStuff(B* b);
   virtual void doWhat();
}

在A.cpp 应该是

void A::doThings(C* c){}

此外,我认为您的 C class 应该将该方法定义为受保护的,以便派生的 classes 可以访问它。

我找到了歧义的原因: Class A 也继承自 class D,它已经是 C 的儿子,因此 doWhat() 调用的歧义

A.h

#include "B.h"
class A: public B, C, D{
   virtual void doThings(C* c);
}

D.h
#include "C.h"
class D:public C{

}

删除多余的继承声明,修改 class A 如下所示避免了问题:

A.h

#include "B.h"
#include "D.h"

class A: public B, D{
virtual void doThings(C* c);
}


A.cpp
void doThings(C* c){
    this->doWhat();    //Now compiling!
}