ciao, ho sovraccaricato l'operatore == nella calsse lista e ho scritto un codice per controllare se l'operatore è stato sovraccaricato correttamente ma, a quanto pare no. posto i codici della classe e la prova del sovraccaricAmento:
listap.h
codice:
#ifndef _LISTAP_H
#define _LISTAP_H
#include <iostream>
using namespace std;
template<class T> class lista
{
private:
typedef T tipoelem;
struct nodo
{
nodo *precedente;
tipoelem elemento;
nodo *successivo;
};
public:
typedef nodo * posizione;
posizione sentinella;
lista();
void crealista();
bool listavuota();
posizione primolista();
bool finelista(posizione);
void inslista(posizione&, tipoelem&);
void canclista(posizione&);
tipoelem leggilista(posizione);
void scrivilista(posizione&, tipoelem&);
posizione predlista(posizione);
posizione succlista(posizione);
bool operator==(lista<T> const &);
};
#endif
template<class T> lista<T>::lista()
{
crealista();
}
template<class T> void lista<T>::crealista()
{
sentinella = (posizione)malloc(sizeof(nodo));
tipoelem elemnullo = 0;
sentinella->precedente = sentinella;
sentinella->elemento = elemnullo;
sentinella->successivo = sentinella;
}
template<class T> bool lista<T>::listavuota()
{
return((sentinella->precedente == sentinella) && (sentinella->successivo == sentinella));
}
template<class T> typename lista<T>::posizione lista<T>::primolista()
{
return(sentinella->successivo);
}
template<class T> bool lista<T>::finelista(posizione p)
{
return(p->successivo == sentinella);
}
template<class T> void lista<T>::inslista(lista<T>::posizione &p, tipoelem& elem)
{
posizione temp = new nodo;
temp->elemento = elem;
temp->precedente = p->precedente;
temp->successivo = p;
p->precedente->successivo = temp;
p->precedente = temp;
p = temp;
}
template<class T> void lista<T>::canclista(posizione &p)
{
posizione temp = p;
p->precedente->successivo = p->successivo;
p->successivo->precedente = p->precedente;
p = p->successivo;
delete(temp);
}
template<class T> typename lista<T>::tipoelem lista<T>::leggilista(posizione p)
{
return(p->elemento);
}
template<class T> void lista<T>::scrivilista(posizione &p, tipoelem& elem)
{
p->elemento = elem;
}
template<class T> typename lista<T>::posizione lista<T>::predlista(posizione p)
{
return(p->precedente);
}
template<class T> typename lista<T>::posizione lista<T>::succlista(posizione p)
{
return(p->successivo);
}
template<class T> bool lista<T>::operator==(lista<T> const &lis)
{
typename lista<T>::posizione p1 = this->primolista();
typename lista<T>::posizione p2 = lis.primolista();
bool esito = false;
bool fine = false;
while(((p1 != this.sentinella) && (p1 != lis.sentinella)) && fine == false)
{
if(this.leggilista(p1) == lis.leggilista(p2))
esito = true;
else
{
esito = false;
fine = true;
}
p1 = this.succlista(p1);
p2 = lis.succlista(p2);
}
return esito;
}
esercizio5.cpp
codice:
#include <cstdlib>
#include <iostream>
#include "listap.h"
using namespace std;
int main(int argc, char *argv[])
{
lista<int> lista1, lista2;
lista<int>::posizione p1 = lista1.primolista();
lista<int>::posizione p2 = lista2.primolista();
for(int a = 0; a < 10; a++)
{
lista1.inslista(p1, a);
p1 = lista1.succlista(p1);
}
for(int a = 0; a < 10; a++)
{
lista2.inslista(p2, a);
p2 = lista2.succlista(p2);
}
if(lista1 == lista2)
cout << 1;
else
cout << 0;
cout << "\n\n";
system("PAUSE");
return EXIT_SUCCESS;
}
mi viene visualizzato il seguente errore:
110 C:\Dev-Cpp\esercizi\liste\listap.h passing `const lista<int>' as `this' argument of `typename lista<T>:
osizione lista<T>:
rimolista() [with T = int]' discards qualifiers.
ma dov'è l'errore???