salve a tutti, ragazzi come da titolo non ho capito bene come cavolo si usino questi template, vi faccio un esempio di codice che mi restituisce sempre errori:

codice:
//definizione di una cella
#ifndef listap_h
#define listap_h

//la cella rappresenta una componente della lista
template <class E>
struct cella {
       E info;
       cella* succ;
       };
       
template <class Elem>
class Listap {
      public:
             cella* posizione;
             //costruttore
             Listap();
             //distruttore
             ~Listap();
             //operazioni
             void creaLista();
             bool Listavuota();
             Elem leggiLista(posizione);
             void scriviLista(Elem, posizione);
             posizione primoLista();
             bool fineLista(posizione);
             posizione succLista(posizione);
             posizione predLista(posizione);
             void insLista(Elem, posizione );
             void cancLista(posizione );
      private:
              posizione lista;
              //la lista è un puntatore ad una posizione che a sua volta punta ad una cella
};
ovviamente seguono tutte le implementazioni delle funzioni ecc...ecc...
fatto sta che quando vado a compilare il codice mi ritrovo diversi errori, ve ne elenco qualcuno:

2 testLista.cpp In file included from testLista.cpp
15 listap.h ISO C++ forbids declaration of `cella' with no type
....
....
...
24 listap.h `posizione' has not been declared
....
...
...

praticamente a quanto ho capito mi da un errore ogni volta che uso posizione poichè il primo errore è proprio nella riga:
cella* posizione;

Mi dite come cavolo avrei dovuto definire un puntatore ad una cella???
dove sbaglio????

GRAZIE mille e ciao