-1

我有以下代码涉及三个类 A,B,C 我该如何避免呢?

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

2 回答 2

1

在 A.cpp 它应该是

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

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

于 2017-03-13T11:14:51.397 回答
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!
}
于 2017-03-13T15:33:44.603 回答