ciao a tutti, ho creato la struttura lista con puntatori. nel test della lista il metodo canclista, che elimina un nodo della lista, mi dà errore. posto i codici:
nodo.h
listap.hcodice:#ifndef _nodo_h #define _nodo_h #include <iostream> #include <stdlib.h> using namespace std; template<class T> class nodo { public: nodo(); void setprec(nodo *); void setelem(T); void setsuc(nodo *); nodo *getprec(); T getelem(); nodo *getsuc(); private: nodo *precedente; T elemento; nodo *successivo; }; #endif template<class T> nodo<T>::nodo() { precedente = NULL; elemento = 0; successivo = NULL; } template<class T> void nodo<T>::setprec(nodo *prec) { precedente = prec; } template<class T> void nodo<T>::setelem(T elem) { elemento = elem; } template<class T> void nodo<T>::setsuc(nodo *succ) { successivo = succ; } template<class T> nodo<T>::nodo<T> *nodo<T>::getprec() { return(precedente); } template<class T> T nodo<T>::getelem() { return(elemento); } template<class T> nodo<T>::nodo<T> *nodo<T>::getsuc() { return(successivo); }
testlista.cppcodice:#ifndef _listap_h #define _listap_h #include "nodo.h" #include <iostream> #include <stdlib.h> #include <stdio.h> using namespace std; template<class tipoelem> class listap { public: typedef nodo<tipoelem> *posizione; listap(); void crealista(); bool listavuota(); posizione primolista(); bool finelista(posizione); tipoelem leggilista(posizione); void scrivilista(posizione, tipoelem); posizione succlista(posizione); posizione predlista(posizione); void inslista(posizione &, tipoelem); void canclista(posizione &); private: nodo<tipoelem> cella; }; #endif template<class tipoelem> listap<tipoelem>::listap() { crealista(); } template<class tipoelem> void listap<tipoelem>::crealista() { cella.setprec(&cella); cella.setsuc(&cella); cella.setelem(0); } template<class tipoelem> bool listap<tipoelem>::listavuota() { return((cella.getprec() == &cella) && (cella.getsuc() == &cella)); } template<class tipoelem> typename listap<tipoelem>::posizione listap<tipoelem>::primolista() { return(&cella); } template<class tipoelem> bool listap<tipoelem>::finelista(typename listap<tipoelem>::posizione pos) { return(pos->getsuc() == primolista()); } template<class tipoelem> tipoelem listap<tipoelem>::leggilista(typename listap<tipoelem>::posizione pos) { return(pos->getelem()); } template<class tipoelem> void listap<tipoelem>::scrivilista(typename listap<tipoelem>::posizione pos, tipoelem elem) { pos->setelem(elem); } template<class tipoelem> typename listap<tipoelem>::posizione listap<tipoelem>::succlista(typename listap<tipoelem>::posizione pos) { return(pos->getsuc()); } template<class tipoelem> typename listap<tipoelem>::posizione listap<tipoelem>::predlista(typename listap<tipoelem>::posizione pos) { return(pos->getprec()); } template<class tipoelem> void listap<tipoelem>::inslista(typename listap<tipoelem>::posizione &pos, tipoelem elem) { posizione temp = new nodo<tipoelem>; temp->setprec(pos->getprec()); temp->setsuc(pos); (pos->getprec())->setsuc(temp); pos->setprec(temp); temp->setelem(elem); pos = temp; } template<class tipoelem> void listap<tipoelem>::canclista(typename listap<tipoelem>::posizione &pos) { posizione temp = pos; (pos->getsuc())->setprec(pos->getprec()); (pos->getprec())->setsuc(pos->getsuc()); pos = pos->getsuc(); delete temp; }
lerrore che mi viene visualizzato è il seguente:codice:#include "listap.h" #include <iostream> #include <stdlib.h> using namespace std; int main() { listap<int> list; listap<int>::posizione pos = list.primolista(); for(int i = 1; i < 10; i++) { list.inslista(pos, i); pos = list.succlista(pos); } pos = list.primolista(); while(!list.finelista(pos)) { cout << pos << "\t"; cout << list.predlista(pos) << " " << list.leggilista(pos) << " " << list.succlista(pos) << "\n"; pos = list.succlista(pos); } cout << "\n\n" << list.primolista() << "\n"; list.canclista(list.primolista()); while(!list.finelista(pos)) { cout << pos << "\t"; cout << list.predlista(pos) << " " << list.leggilista(pos) << " " << list.succlista(pos) << "\n"; pos = list.succlista(pos); } system("pause"); return 0; }
28 C:\Dev-Cpp\esercizi\testlstap.cpp no matching function for call to `listap<int>::canclista(nodo<int>*)'
perchè mi dà errore al metodo canclista mentre al metodo inslista va tutto bene???
help me!!!

Rispondi quotando