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
codice:
#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);
}
listap.h
codice:
#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;
}
testlista.cpp
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;
}
lerrore che mi viene visualizzato è il seguente:
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!!!