salve, sn riuscito a implementare la classe lista e funziona. ora, però, sto cercando di renderla una classe template ma nel metodo primolista mi da un errore di compilazione. questo è il codice della calsse:

listap.h
codice:
#ifndef _LISTAP_H
#define _LISTAP_H

#include <iostream>

using namespace std;

template<class T> class listap
{
    private:
        typedef int tipoelem;
        struct nodo
        {
            nodo *precedente;
            T elemento;
            nodo *successivo;
        };
        typedef T tipoelem;
    public:
        typedef nodo * posizione;
        posizione sentinella;
            
        listap();
        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);
};

#endif
listap.cpp
codice:
#include "listap.h"
template<class T> listap<T>::listap()
{
	crealista();
}

template<class T> void listap<T>::crealista()
{
	sentinella = (posizione)malloc(sizeof(nodo));
    tipoelem elemnullo = 0;
	sentinella->precedente = sentinella;
	sentinella->elemento = elemnullo;
	sentinella->successivo = sentinella;
}

template<class T> bool listap<T>::listavuota()
{
	return((sentinella->precedente == sentinella) && (sentinella->successivo == sentinella));
}

template<class T> listap::posizione listap<T>::primolista()
{
    return(sentinella->successivo);
}

template<class T> bool listap<T>::finelista(posizione p)
{
    return(p->successivo == sentinella);
}

template<class T> void listap<T>::inslista(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 listap<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> listap<T>::tipoelem listap::leggilista(posizione p)
{
    return(p->elemento);
}

template<class T> void listap<T>::scrivilista(posizione &p, tipoelem elem)
{
    p->elemento = elem;
}

template<class T> listap<T>::posizione listap::predlista(posizione p)
{
    return(p->precedente);
}

template<class T> listap<T>::posizione listap::succlista(posizione p)
{
    return(p->successivo);
}
l'errore che mi viene notificato è il seguente:
`template<class T> class listap' used without template parameters

ho provato a cercare dei suggerimenti in rete ma non sn riuscito a risolvere il problema. in cosa avrei sbagliato???