ciao a tutti, ho creato la struttura dati pila con cursori, nel testare se i metodi sono stati creati correttamente, ricevo un errore dopo la compilazione. i codici della struttura e del relativo test sono i seguenti:

pilac.h
codice:
#ifndef pilac_h
#define pilac_h

#include<iostream>
#include<stdlib.h>

#define MAXSPAZIO 1000

using namespace std:

template<class tipoelem>
class pilac
{
   public:
      pilac();
      
      void creapila();
      bool pilavuota();
      tipoelem leggipila();
      void inpila(tipoelem);
      void fuoripila();
   private:
      typedef struct Nodo
      {
         int precedente;
         tipoelem elemento;
      } nodoc;
      
      static nodo spazio[MAXSPAZIO];
      static int testalibera;
      static int lungpilalibera;
      int testa;
      int lungpila;
      static nodo *inizializzalibera();
      void sposta(int *, int *);
};

#endif

template<class tipoelem>
typename pilac<tipoelem>::nodo pilac<tipoelem>::spazio = inizializzalibera();

template<class tipoelem>
int pilac<tipoelem>::testalibera = MAXSPAZIO - 1;

template<class tipoelem>
int pilac<tipoelem>::lungpilalibera = MAXSPAZIO;

template<class tipoelem>
typename pilac<tipoelem>::nodo *pilac<tipoelem>::inizializzalibera()
{
   for(int i = 0; i < MAXSPAZIO; i++)
   {
      spazio[i].prec = i - 1;
      spazio[i].elemento = new tipoelem;
   }
   return spazio;
}

template<class tipoelem>
void pilac<tipoelem>::sposta(int *pos1, int *pos2)
{
   int temp = *pos1;
   *pos1 = spazio[*pos1].precedente;
   spazio[temp].precedente = *pos2;
   *pos2 = temp;
}

template<class tipoelem>
pilac<tipoelem>::pilac()
{
   this->creapila();
}

template<class tipoelem>
void pilac<tipoelem>::creapila()
{
   testa = testalibera;
   lungpila = 0;
}

template<class tipoelem>
bool pilac<tipoelem>::pilavuota()
{
   return(lungpila == 0)
}

template<class tipoelem>
tipoelem pilac<tipoelem>::leggipila();
{
   return(spazio[testa].elemento);
}

template<class tipoelem>
void pilac<tipoelem>::inpila(tipoelem elem)
{
   if(lungpilalibera != 0)
   {
      sposta(&testalibera, &testa);
      spazio[testa].elemento = elem;
      lungpila++;
      lungpilalibera--;
   }
   else
      cerr << "spazio non sufficiente.\n\n";
}

template<class tipoelem>
void pilac<tipoelem>::fuoripila()
{
   if(lungpila != 0)
   {
      sposta(&testa, &testalibera);
      spazio[testalibera].elemento = testalibera;
      lungpila--;
      lungpilalibera++;
   }
   else
      cerr << "pila vuota.\n\n";
}
testcodac.cpp
codice:
#include "pilac.h"
#include<iostream>
#include<stdlib.h>

using namespace std;

int main()
{
   pilac<int> stack;
   
   system("pause");
   return 0;
}
in pratica il test è per vedere se funziona il costruttore (è da completare): l'errore che mi viene visualizzato è il seguente:

[Linker error] undefined reference to `WinMain@16'

cosa devo fare???