Ho implementato la il tipo di dato lista concatenata in c++. Solo che in un metodo della classe Lista<T> mi da errore quando passo un indirizzo a nodo.
Mi spiego meglio
Come potete vedere con setPs passo un indirizzo e lo passo per reference costante per prevenire modifiche.codice:#ifndef NODO_H #define NODO_H #include <iostream> using namespace std; template <class T> class Nodo{ public: Nodo(){ info = 0; ps = 0; } Nodo(const T& x,Nodo* p = NULL){ info = x; ps = p; } Nodo(const Nodo& n){ info = n.info; ps = n.ps; } void setInfo(const T& x){ info = x; } void setPs(const Nodo* &p){ //mi da errore con void setPs(const Nodo* &p) ps = p; } T getInfo(){ return info; } Nodo* getPs(){ return ps; } private: T info; Nodo *ps; }; #endif
e qui il compilatore mi da degli errori:codice://Lista.h #include <iostream> #include <assert.h> #include "Nodo.h" using namespace std; template <class T> class Lista{ public: Lista(); Lista(const Lista&); ~Lista(); bool inserisciInTesta(const T&); bool inserisciInCoda(const T&); bool inserisciPostoI(const T&,int i); bool rimuoviInTesta(T&); bool rimuoviInCoda(T&); bool rimuoviPostoI(T&); T getInfoPostoI(int i); int getDim(); private: Nodo<T> *testa; int dim; }; template <class T> bool Lista<T>::inserisciInTesta(const T& x){ Nodo<T> *nuovo; nuovo = new (nothrow) Nodo<T>; if(nuovo == NULL) return false; dim++; nuovo->setInfo(x); nuovo->setPs(testa); testa = nuovo; return true; } template <class T> bool Lista<T>::inserisciInCoda(const T& x){ Nodo<T> *current = testa,*nuovo; nuovo = new (nothrow) Nodo<T>; if(nuovo == NULL) return false; nuovo->setInfo(x); nuovo->setPs(NULL); dim++; if(testa == NULL){ testa = nuovo; } else{ while(current->getPs() != NULL) current = current->getPs(); current->setPs(nuovo); } return true; } template <class T> bool Lista<T>::inserisciPostoI(const T& x,int i){ Nodo<T> *current = testa,*nuovo; if(i<=0 || i>dim) return false; nuovo = new (nothrow) Nodo<T>; if(nuovo == NULL) return false; if(i==1){ inserisciInTesta(x); } else{ for(int j=1;j<i-1;j++){ current = current->getPs(); } nuovo->setInfo(x); nuovo->setPs(current->getPs()); current->setPs(nuovo); dim++; } return true; } template <class T> int Lista<T>::getDim(){ return dim; } template <class T> Lista<T>::Lista(){ dim = 0; testa = NULL; } template <class T> Lista<T>::Lista(const Lista& x){ int dim = x.getDim(); Nodo<T> *n1 = x.testa; Nodo<T> *nuovo,*current; if(dim>=1){ nuovo = new Nodo; nuovo->setInfo(x.testa->getInfo()); testa = nuovo; current = nuovo; n1 = n1->getPs(); for(int i=2;i<=dim;i++){ nuovo = new Nodo; nuovo->setInfo(n1->getInfo()); current.setPs(nuovo); current = nuovo; n1 = n1->getPs(); } current->setPs(NULL); } } template <class T> Lista<T>::~Lista(){ Nodo<T> *temp; Nodo<T> *current = testa; for(int i=1;i<=getDim();i++){ temp = current->getPs(); delete current; current = temp; } }
Che cavolo significa che non riesce a convertire un Nodo<T>* in un Nodo<T>*&?codice:Errore 1 error C2664: 'Nodo<T>::setPs': impossibile convertire il parametro 1 da 'Nodo<T> *' a 'const Nodo<T> *&' d:\documents and settings\vincenzo\documenti\visual studio 2008\projects\pilallcpp\pilallcpp\lista.h 41 PilaLLCpp Errore 2 error C2664: 'Nodo<T>::setPs': impossibile convertire il parametro 1 da 'int' a 'const Nodo<T> *&' d:\documents and settings\vincenzo\documenti\visual studio 2008\projects\pilallcpp\pilallcpp\lista.h 53 PilaLLCpp Errore 3 error C2664: 'Nodo<T>::setPs': impossibile convertire il parametro 1 da 'Nodo<T> *' a 'const Nodo<T> *&' d:\documents and settings\vincenzo\documenti\visual studio 2008\projects\pilallcpp\pilallcpp\lista.h 61 PilaLLCpp Errore 4 error C2664: 'Nodo<T>::setPs': impossibile convertire il parametro 1 da 'Nodo<T> *' a 'const Nodo<T> *&' d:\documents and settings\vincenzo\documenti\visual studio 2008\projects\pilallcpp\pilallcpp\lista.h 82 PilaLLCpp Errore 5 error C2664: 'Nodo<T>::setPs': impossibile convertire il parametro 1 da 'Nodo<T> *' a 'const Nodo<T> *&' d:\documents and settings\vincenzo\documenti\visual studio 2008\projects\pilallcpp\pilallcpp\lista.h 83 PilaLLCpp![]()
Il secondo errore è dovuto al fatto che alla riga 53 gli passo NULL, ma non capisco perchè mi da errore...![]()
codice://main #include "Nodo.h" #include "Lista.h" #include <iostream> using namespace std; int main(){ Lista<int> l; l.inserisciInTesta(2); l.inserisciInTesta(4); l.inserisciInCoda(20); l.inserisciPostoI(52,2); system("pause"); return 0; }

Rispondi quotando