Originariamente inviato da eardin
Salve atutti, questa è la prima volta nel forum.
Vorrei chiedere un aiuto riguardo l'ereditarietà tra classi template.
Ecco parte del codice che ho scritto:
codice:
template<class V>
class BST: public Albero<V>{
public:
BST<V>();
virtual ~BST<V>();
//bool insert(const V&, const V&);//Inserisce un elemento
bool insert(const V&); //inserisce un elemento nel BST
//bool erase(V); //elimino un elemento
typename Albero<V>::Iteratore find(const V &) const;
};
la classe template Albero è molto lunga, il suo unico campo dati è:
codice:
smartp radice; //smartp è un tipo di puntatore che funziona, non è il problema.
Gli specificatori di accesso di Albero sono pubblici per semplificare.
il metodo insert(const V&) non è presente in Albero.
Il problema è questo:
se in BST scrivo una cosa tipo:
codice:
template<class V>
bool BST<V>::insert(const V& el){
if(Albero<V>::radice==0){ //è il caso in cui l'albero è vuoto
cout<<"Faccio il primo inserimento\nNumero Figli:";
Albero<V>::radice = new typename Albero<V>::Nodo(el);
return true;
}
}
funziona tutto, ma se tolgo Albero<V>::radice il compilatore g++-4.1 e g++-3.4 mi dice:
> error: `radice' was not declared in this scope
Spero di essermi spiegato
Grazie in anticipo.