模棱两可的方法编译错误
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!
}
我有以下代码涉及三个 类 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!
}