Sto definendo una classe con template; all'interno di questa ci sarà una struct; vorrei che un metodo avesse come valore di ritorno la struct,ma mi da molti errori:

template <class T>


class Albero{
public:
static const int NIL = 0;
static const int ROOT=-1;//la radice sarà identificata tramite il valore -1 nel padre
typedef T tipoelem;
typedef Figlio* pos;
typedef int posV;
struct cella{
tipoelem elemento;
pos lFigli;
bool assegnato;
posV posPadre;
};

//typedef cella Cella;
Albero();//sc
Albero(int);//sc
//~Albero;
//albero con obj
void creaAlbero();//sc
bool alberoVuoto();//sc
void insRadice(posV);//sc
posV radice();//sc
posV padre(posV);//sc
bool foglia(posV);//sc
posV primoFiglio(posV);//sc
bool ultimoFratello(posV);//sc
posV succFratello(posV);//sc
void scriviNodo(posV,tipoelem);//sc
tipoelem leggiNodo(posV);//sc

cella getNodo(posV);
int getMAXLEN();
private:
cella *Nodi;
int MAXLEN;
posV cercaLib();//non è meglio metterla public???
pos trovaFratello(posV);

};

template<class T> cella Albero<T>::getNodo(posV p){
return (Nodi[p]);
}
Sono sicuro che l'errore risiede nella sintassi del metodo, infatti se elimino il metodo la classe funziona...
Devo per forza definire la struct come un nuovo oggetto?Vi prego aiutatemi sto impazzendo...