Hola
Estaba practicando con el uso de plantillas en c++, y tengo el siguiente codigo
Fichero Conjunto.h 
    template <class TIPOP>
    class posicion;
     
    template <class TIPO>
    class conjunto{
    public:
     
            conjunto();
     
            conjunto(const conjunto &c);
     
            bool pertenece(TIPO elem) const;
     
            void insertar(TIPO elem);
     
            void borrar(TIPO elem);
     
     
            bool vacio(TIPO elem) const;
     
     
            posicion<TIPO> begin();
     
            posicion<TIPO> end();
     
     
            posicion<TIPO> siguiente(posicion<TIPO> posic);
     
            TIPO& elemento(posicion<TIPO> posic);
     
     
            const TIPO& elemento(posicion<TIPO> posic) const;
     
     
            TIPO& elemento(int posic);
     
     
            int getCardinalidad();
     
    private:
            void resize(int tam);
           
            TIPO* elementos;
            int cardinalidad;      
     
    };
     
    template <class TIPOP>
    class posicion{
            conjunto<TIPOP> subconjunto;
            int indice;
    };
 
 Fichero Conjunto.cpp    #include<Conjunto.h>
     
                    conjunto<TIPO>::conjunto(){}
     
                    conjunto<TIPO>::conjunto(const conjunto<TIPO> &c){}
     
    bool            conjunto<TIPO>::pertenece(TIPO elem) const{}
     
    void            conjunto<TIPO>::insertar(TIPO elem){}
     
    void            conjunto<TIPO>::borrar(TIPO elem){}
     
    bool            conjunto<TIPO>::vacio(TIPO elem) const{}
     
    posicion<TIPO>  conjunto<TIPO>::begin(){}
     
    posicion<TIPO>  conjunto<TIPO>::end(){}
     
    posicion<TIPO>  conjunto<TIPO>::siguiente(posicion<TIPO> posic){}
     
    TIPO&           conjunto<TIPO>::elemento(posicion<TIPO> posic){}
     
    TIPO&           conjunto<TIPO>::elemento(int posic){}
     
    const TIPO&     conjunto<TIPO>::elemento(posicion<TIPO> posic) const{}
 
 
 Fichero usoConjunto.cpp 
    #include "Conjunto.h"
     
    using namespace std;
     
    conjunto<int> unionc(conjunto<int> c1, conjunto<int> c2){
     
            conjunto<int> nuevo;
            for(int c = 0; c < c1.getCardinalidad(); c++){
                    nuevo.insertar(c1.elemento(c));
            }
     
            for (int a = 0; a < c2.getCardinalidad();a++){
                    nuevo.insertar(c2.elemento(a));
            }
     
            return nuevo;
    }
     
     
    int main(){}
 
Al compilarlo con make, me da la siguiente salida:
usoConjunto.cpp:(.text+0x1b): undefined reference to `conjunto<int>::conjunto()'
usoConjunto.cpp:(.text+0x35): undefined reference to `conjunto<int>::elemento(int)'
usoConjunto.cpp:(.text+0x44): undefined reference to `conjunto<int>::insertar(int)'
usoConjunto.cpp:(.text+0x54): undefined reference to `conjunto<int>::getCardinalidad()'
usoConjunto.cpp:(.text+0x78): undefined reference to `conjunto<int>::elemento(int)'
usoConjunto.cpp:(.text+0x87): undefined reference to `conjunto<int>::insertar(int)'
usoConjunto.cpp:(.text+0x97): undefined reference to `conjunto<int>::getCardinalidad()'
He buscado por internet y por lo que veo hay un error al enlazar, pero no se como solucionarlo :S