模糊方法编译错误

时间:2017-03-13 11:09:10

标签: c++ inheritance ambiguous-call

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

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();
}

2 个答案:

答案 0 :(得分:1)

在A.cpp 它应该是

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

另外我相信你的C类应该将该方法定义为protected,以便派生类可以访问它。

答案 1 :(得分:0)

我找到了含糊不清的原因: A类也继承自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{

}

问题是避免删除冗余继承声明,修改类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!
}