ctor de clase con plantillas no reconocido cuando separo la implementacion de la declacion

breno
15 de Junio del 2008
El problema es este,
Tengo el siguiente codigo en un archivo "ClassOne.h":
//ClassOne.h
template <typename D>
class ClassOne
{
public:
ClassOne();
};

template <typename D>
ClassOne<D>::ClassOne()
{
}
//Fin de ClassOne.h
Y en el main :
//Main.cpp
#include "ClassTwo.h"
#include "ClaseOne.h"
int main(int argc, char * argv [])
{
ClassOne<ClassTwo>* c= new ClassOne<ClassTwo>() ;
return 0;
}
//fin de Main.cpp
Este codigo compila perfectamente,

Ahora cuando quiero poner la implemnetacion en un archivo diferente como se debe hacer:

//ClassOne.cpp
#include "ClassOne.h"
template <typename D>
ClassOne<D>::ClassOne()
{
}
//
El compilador arroja un mensaje de error:
undefined reference to `ClassOne<ClassTwoB>::ClassOne()'
collect2: ld devolvió el estado de salida 1

Es el mismo codigo solo que el que da error esta mas organizado.
Me gustaria saber cual es el error, que estoy omitiendo para que el codigo pueda funcionar con la implementacion separada. Tiene que ver con el uso de plantillas, ya que cuando hago lo mismo con otra clase que no usa plantillas no hay problema.

Desde ya gracias por cualquier ayuda.