Salve a tutti,
avevo un programma in C++ che implementava delle liste con cursore con determinati oggetti, inizialmente il tipo di oggetti inseribile era solo di tipo "int", mentre la posizione degli oggetti anch'essa di tipo "int".

Ora ho cercato di templatizzare il tutto in modo che gli oggetti possano diventare di qualsiasi tipo, ed appartenendo la lista con cursori ad una superclasse che dovrò ampliare di liste di vario genere volevo templetizzare anche la posizione (che su altre diventerà un indirizzo e non un indice intero).

Il punto è che è la prima volta che provo ad utilizzare i template ed il compilatore, nel mio caso il dev, mi riempie di errori di vario tipo e non riesco a capire se ho commesso "errori sintattici", "errori logici" o un pò ed un pò.

Praticamente mi da sempre questi due errori ripetuti per le intestazioni di ogni metodo nel file .cpp (ovvero sul " template < class T, class P>" e sull'intestazione del metodo):

codice:
42 C:\Users\Neptune\Desktop\Asd\laboratorio\10-11-2010 V.2\Lista con cursori\listap.cpp expected constructor, destructor, or type conversion before "classe_spazio" 
42 C:\Users\Neptune\Desktop\Asd\laboratorio\10-11-2010 V.2\Lista con cursori\listap.cpp expected `;' before "classe_spazio"
Inoltre mi dice sia nel file .cpp che nel .h
codice:
94 C:\Users\Neptune\Desktop\Asd\laboratorio\10-11-2010 V.2\Lista con cursori\listap.h `classe_spazio' does not name a type 
10 C:\Users\Neptune\Desktop\Asd\laboratorio\10-11-2010 V.2\Lista con cursori\listap.cpp `classe_spazio' does not name a type
Ovvero non mi riconosce la classe spazio? perchè?

Vi incollo il codice sperando possiate darmi una mano:

listap.h
codice:
#ifndef _LISTAP_H
#define _LISTAP_H
#define N 100		//dimensione del vettore
#include <iostream>
#include <string>

using std::string;
using namespace std;

//   SUPERCLASSE:
     
template< class T, class P >
class Superclasse{
                  
                 
            public:
                   typedef T tipoelem;
                   typedef P posizione;
                  
                   virtual void crealista()=0;
                   virtual bool listavuota() const =0;
                   virtual posizione primoLista() const =0 ;
                   virtual posizione succlista(posizione) const =0;
                   virtual posizione preclista(posizione) const =0;
                   virtual bool finelista(posizione) const =0;
                   virtual tipoelem leggilista(posizione) const =0;
                   virtual void scrivilista(tipoelem, posizione)=0;
                   virtual void inslista(tipoelem,posizione)=0;
                   virtual void canclista(posizione p)=0; 
                   
                   bool palindroma();  
                   int lunghezza();
                   void inverti();        
                                          
      };


template< class T, class P >
class classe_spazio
{                   
public:
    typedef T tipoelem;
    typedef P posizione;
    struct TcomponenteSpazio
	 {                                
        tipoelem elemento;
        posizione successivo;
        posizione precedente;
        TcomponenteSpazio()
        {
            elemento=0;
            successivo=precedente=-1;             
        }
	 };
	 
    classe_spazio();
    posizione getTesta();
    posizione getCoda();
    void setCoda(posizione);
    void setTesta(posizione);
    inline TcomponenteSpazio & operator[](size_t Index)
    {
        return spazio[Index];
    }
    
private:
    TcomponenteSpazio spazio[N];
    posizione componenteSpazio_testa;
    posizione componenteSpazio_coda;
};

template< class T, class P >
class Lista : public Superclasse<T, P> {
      
  public:	
    typedef T tipoelem;
    typedef P posizione;
     
    Lista();
    

    void crealista();
    bool listavuota() const;
    posizione primoLista() const;
    posizione succlista(posizione) const;
    posizione preclista(posizione) const;
    bool finelista(posizione) const;
    tipoelem leggilista(posizione) const;
    void scrivilista(tipoelem, posizione);
    void inslista(tipoelem,posizione);
    void canclista(posizione p);
    
   private:
    static classe_spazio spazio;
    int testa;
    int coda;  

  };
  
  //-----------------------------------------------------------------------------------------------------------
  
#endif // _LISTAP_H