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