Вы никогда не должны включать файл cpp.
Поместите реализацию шаблона в заголовочный файл. Если вы хотите сохранить его отдельно, создайте 2 заголовочных файла.
//contents of foo.h
void foo1(int a);
template <class mType>
void foo2( mType a)
{
...
}
//contents of foo.cpp
#include foo.h
void foo1(int a)
{
...
}
(В качестве альтернативы есть ключевое слово export
, хотя ни один из основных компиляторов не поддерживает его, и оно было удалено в C ++ 11 Другими словами, не используйте его)