Guarda ora ho provato.
Facendo le seguenti modifiche a me compila:
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);
private:
nodo<tipoelem> cella;
};
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());
}
#endif
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;
};
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>::getprec()
{
return(precedente);
}
template<class T>
T nodo<T>::getelem()
{
return(elemento);
}
template<class T>
nodo<T> *nodo<T>::getsuc()
{
return(successivo);
}
#endif
main
codice:
#include "listap.h"
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
listap<int> list;
cout << list.listavuota() << "\n\n";
cout << list.primolista() << "\n\n";
listap<int>::posizione posi = list.primolista();
cout << list.finelista(posi) << "\n\n";
cout << list.leggilista(posi) << "\n\n";
int el = 50;
list.scrivilista(posi, el);
cout << list.leggilista(posi) << "\n\n";
cout << list.succlista(list.primolista()) << "\n\n";
system("pause");
return 0;
}
prova un po' e fammi sapere...
PS:
Se stai usando il dev (prima di tutto ti consiglio di cambiarlo) dopo aver apportato le modifiche fai CTRL+F11, oppure clicca su esegui e nel menù che appare clicca su Riassembla tutto