The saparation between the declaration and the defination of template class is illegal. That is because the template class is not a real class. The compiler take resposibility to generate the specific class when the user assign the argument of the parameter. So there is no interface or implementation for template class. All the code is declaration like the MACRO. The compiler can not link the implementation and the declaration.
So, just keep in mind, put all the code of template class in a single file; do not separate them.