Неоднозначная ошибка компиляции метода

У меня есть следующий код, включающий три класса A, B, C
Файл A.pp не компилируется с ошибкой «неоднозначный вызов» при вызове метода inheriTed 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();
}

-1

Решение

В A.cpp
так должно быть

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

Также я считаю, что ваш класс C должен определять этот метод как защищенный, чтобы производные классы могли получить к нему доступ.

1

Другие решения

Я нашел причину двусмысленности:
Класс 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!
}
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector