我有以下代码涉及三个类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();
}
答案 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!
}