Problema al crear lista generica

Imagen de rfrutos
0 puntos

Hola estoy tratando de realizar la implementación de una lista estática genérica en C++ a través del uso de plantillas el problema es que aunque mi lista traga clases sin problemas no consigo que maneje objetos sencillos como enteros. Cuando trato de compilar un ejemplo sencillo que implemente una lista de enteros me da un error de linkado. Alguien me puede echar una mano con esto??

La definición de mi lista es la siguiente:

/*****************************************************************************
 *
 * $FILE: ListaEstatica.h
 *
 * $Autor: rfrutos
 *
 *****************************************************************************
 *
 * Descripcion: Definición de la clase ListaEstatica que implementa una lista
 * de elementos. La lista está desordenada y admite huecos. El uso de la lista
 * implica que los elementos de la lista tengan definido su constructor copia
 * y su operador asignación.
 * 
 * **************************************************************************/

#ifndef _LISTA_ESTATICA_H_
#define _LISTA_ESTATICA_H_

#include 

template 
class Nodo
{
  public:
    Nodo (){}

    Nodo (T_Dato dato)
    {
      Dato = dato;
    }

    ~Nodo (){}

    void TomaNodo(T_Dato dato)
    {
      Dato = dato;
    }

    T_Dato DameNodo ()
    {
      return Dato;
    }
  private:

    T_Dato Dato;
};

template 
class ListaEstatica 
{
  public:

    /**
     * Constructor vacío
     */
    ListaEstatica ();

    /**
     * Constructor de numero de elementos
     *
     * @param numeroMaximoElementos Numero maximo de elementos
     */
    ListaEstatica (unsigned int numeroMaximoElementos);

    /**
     * Constructor copia
     * Crea una nueva instancia de la lista
     */
    ListaEstatica (ListaEstatica &origen);

    /**
     * Operador asignacion
     */
    ListaEstatica &operator = (ListaEstatica &origen);

    /**
     * Destructor de la clase
     * Libera los recursos de la clase
     */
    ~ListaEstatica ();

    /**
     * Método que inicializa la lista con un numero máximo de elementos
     * pasado por parámetro
     *
     * @param numeroMaximoElementos Numero máximo de elementos de la lista
     *
     * @return Resultado de la operacion 0 éxito != 0 fracaso
     */
    int TomaNumeroMaximo (unsigned int numeroMaximoElementos);

    /**
     * Método que añade un elemento en una posicion de la lista. 
     * Si la posicion esta libre añade el elemento en dicha posición, si
     * la posición está ocupada machaca el contenido anterior de la posicion.
     * Si la lista está llena retorna con un valor de error. 
     * Si la posicion es negativa, inserta 
     * el elemento en la primera posición de la lista
     *
     * @param posicion Posicion de la lista en la que añadir el elemento
     *
     * @return resultado de la operacion 0 éxito != 0 fracaso
     */
    int Toma (int posicion, T_Dato elemento);

    /**
     * Método que devuelve el elemento de la posición dada de la lista, 
     * retrona una copia del elemento, dicha copia deberá ser liberada
     * Si la posicion es negativa devuelve el primer elemento de la lista
     *
     * @param posicion Posicion de la lista a retornar
     *
     * @return Elemento de la posición dada de la lista
     */
    T_Dato Dame (int posicion);

    /**
     * Método que retorna por referencia la posición dada de la lista
     *
     * @param posicion Posición de la lista a retornar
     * @param elemento Referencia a rellenar con la posición de la lista
     *
     * @retorna la validez de la operación 0 si la posición está llena, 
     * distinto de cero si está vacía
     */
    int Dame (int posicion, T_Dato &elemento);

    /**
     * Retorna el número máximo de elementos
     *
     * @return numero máximo elementos
     */
    unsigned int DameNumeroMaximo ()
    {
      return NumeroMaximoElementos;
    }

    /**
     * Retorna el numero de elementos de la lista
     *
     * @return numero de elementos de la lista
     */
    unsigned int DameNumero ()
    {
      return NumeroElementos;
    }

    /**
     * Método que devuelve la ocupación de una posición de la lista
     *
     * @return true si la posición está ocupada, false si no lo está
     */
    bool PosicionOcupada (int posicion)
    {
      return Ocupado[posicion];
    }

    /**
     * Método que devuelve si la lista está vacía
     *
     * @return true si la lista está vacía false en caso contrario
     */
    bool Vacia ()
    {
      return (NumeroElementos == 0);
    }

    /**
     * Método que devuelve si la lista esta llena
     *
     * @return true si la lista esta llena false en caso contrario
     */
    bool LLena ()
    {
      return (NumeroElementos == NumeroMaximoElementos);
    }

    /**
     * Método que borra la lista
     * Marca la lista completa como vacía y hace NumeroElementos = 0
     */
    void Borra ();
  			
    /**
     * Método que borra la posicion de la lista entrada por parametro
     *
     * @param posicion Posicion de la lista a borrar
     *
     */
    void Borra (int posicion);
  			


  private:

    /**
     * Array de elementos de la lista
     */
    Nodo *Lista;

    /**
     * Numero máximo de elementos de la lista
     */
    unsigned int NumeroMaximoElementos;

    /**
     * Número actual de elementos que contiene la lista
     */
    unsigned int NumeroElementos;

    /**
     * Array de posiciones ocupadas de la lista
     */
    bool *Ocupado;

};
#endif /* _LISTA_ESTATICA_H_ */

Y el ejemplo sencillo donde quiero usarla con enteros es el siguiente:

/*****************************************************************************
 *
 * $FILE: PU_ListaEstatica.h
 *
 * $Autor: rfrutos
 *
 *****************************************************************************
 *
 * Descripcion: Prueba Unitaria de la clase ListaEstatica
 *
 * **************************************************************************/

#include 
#include 
#include 


int main (void)
{

  int tamanoLista, elemento;
  ListaEstatica  *ListaNumeros;
  int i;


  printf ("PRUEBA UNITARIA DE LA CLASE LISTA ESTATICA\n\n\n");

  

  printf ("Introduzca un numero : ");
  scanf ("%d", &tamanoLista);

  printf ("Crearé una lista de %d enteros...", tamanoLista);

  ListaNumeros = new ListaEstatica  ( (unsigned int)tamanoLista);

  for (i=0; iToma (i, elemento);
  }

  printf ("La lista que introdujo es: ");
  for (i=0; iDame (i);
    printf ("%d", elemento);
  }
  printf ("\n");

}