Mam trzy klasy skonstruowany tak:Mocowanie C++ Wielokrotne dziedziczenie Niejednoznaczne połączeń
#include <iostream>
using namespace std;
class Keyword
{
public:
virtual float GetValue() = 0;
};
class CharacterKeyword : public Keyword
{
public:
virtual float GetValue(){return _value;}
private:
float _value;
};
class MeasurementKeyword : public Keyword
{
public:
virtual float GetValue(){return _value;}
private:
float _value;
};
class AddressType : public CharacterKeyword, public MeasurementKeyword
{
private:
float address;
float addresExt;
};
int main()
{
AddressType *a = new AddressType();
a->GetValue();
return 0;
}
Otrzymuję następujący:
In function ‘int main()’:
error: request for member ‘GetValue’ is ambiguous
error: candidates are: virtual float Keyword::GetValue()
error: virtual float MeasurementKeyword::GetValue()
error: virtual float CharacterKeyword::GetValue()
Zrobiłem kilka czytania w wielu dziedziczeniu i wiem, że ma wiele pułapek - jest to jeden z nich. Potrzebuję mojej struktury klasowej, aby tak wyglądać, więc zastanawiałem się, czy istnieje sposób, w jaki mogę to naprawić za pomocą szablonów?
Aktualizacja
Po przeczytaniu komentarzy, moja oryginalna myśl, że być może po prostu wyznaczać między AddressType
że jest CharacterKeyword
i AddressType
że jest MeasurementKeyword
przez templating z AddressType
. I używanie go jako takiego w zaktualizowanym kodzie. LUB Mogę tylko określić przestrzeń nazw członka, który chciałbym. Skoro szablonowy sposób nie został jeszcze wymieniony jako odpowiedź, czy jest to zła poprawka? Czy powinienem tylko określić przestrzeń nazw członka, którego chcę?
template <class T>
class AddressType : public T
{
private:
float address;
float addresExt;
};
int main()
{
AddressType<MeasurementKeyword> *a = new AddressType<MeasurementKeyword>();
a->GetValue();
return 0;
}
Zależy jak chcesz to naprawić .. co chcesz się zdarzyć tutaj? –
@KarthikT dlatego dałem mu obie strony;) – aaronman
@aaronman Yup, nie ma nic przeciwko twojemu rozwiązaniu, ale nie jestem pewien, co chce osiągnąć z szablonami .. –