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:
la classe template Albero è molto lunga, il suo unico campo dati è: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; };
Gli specificatori di accesso di Albero sono pubblici per semplificare.codice:smartp radice; //smartp è un tipo di puntatore che funziona, non è il problema.
il metodo insert(const V&) non è presente in Albero.
Il problema è questo:
se in BST scrivo una cosa tipo:
funziona tutto, ma se tolgo Albero<V>::radice il compilatore g++-4.1 e g++-3.4 mi dice: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; } }
> error: `radice' was not declared in this scope
Spero di essermi spiegato
Grazie in anticipo.

Rispondi quotando