Ho tre classi strutturata in questo modo:Fixing C++ ereditarietà multipla chiamata ambiguo
#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;
}
Sto ottenendo il seguente:
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()
Ho letto un po 'di più sull'ereditarietà e so che ha molte insidie: questo è uno di questi. Ho bisogno che la mia struttura di classe sia così, quindi mi chiedevo se c'era un modo per risolvere questo problema usando i modelli?
Aggiornamento
Dopo aver letto i vostri commenti, il mio pensiero originale era che forse posso solo delineare tra un AddressType
che è una CharacterKeyword
e un AddressType
che è una MeasurementKeyword
dal templating del AddressType
. E usandolo come tale nel codice aggiornato. O Posso solo specificare lo spazio dei nomi del membro che vorrei. Dal momento che il modo basato sui modelli non è stato ancora menzionato come risposta, è una cattiva soluzione? Devo solo specificare lo spazio dei nomi del membro che voglio?
template <class T>
class AddressType : public T
{
private:
float address;
float addresExt;
};
int main()
{
AddressType<MeasurementKeyword> *a = new AddressType<MeasurementKeyword>();
a->GetValue();
return 0;
}
dipende da come si vuole risolvere questo problema .. cosa vuoi che accada qui? –
@KarthikT è per questo che gli ho dato entrambi i modi;) – aaronman
@aaronman Yup, non sbaglio la tua soluzione, ma non sono sicuro di cosa vuole compiacere con i modelli .. –