模板类定义中的有关问题

模板类定义中的问题
我在1个.h文件中定义了一个模板类,在1个.cpp文件中是类函数的实现,在1个文件中编写了主函数
如下
//der.h文件
#include   <iostream>
using   namespace   std;
template   <typename   T> class   tempcla{
T   a;
public:
T   geta();
tempcla(T   n);
};
//der.cpp文件
#include   <iostream>
#include   "der.h "
using   namespace   std;
template   <typename   T> tempcla <T> ::tempcla(T   n){
a=n;
}
template   <typename   T> T   tempcla <T> ::geta(){
return   a;
}
//main.cpp文件
#include   <iostream>
#include   "der.h "
using   namespace   std;
void   main(){
tempcla <int>   c1(5);
cout < <c1.geta() < <endl;
}
为何连接时总是出现如下错误提示。而将3个文件合并成一个.cpp文件,则没有错误一切正常。请各位行家指教。
main.obj   :   error   LNK2001:   unresolved   external   symbol   "public:   int   __thiscall   tempcla <int> ::geta(void) "   (?geta@?$tempcla@H@@QAEHXZ)
main.obj   :   error   LNK2001:   unresolved   external   symbol   "public:   __thiscall   tempcla <int> ::tempcla <int> (int) "   (??0?$tempcla@H@@QAE@H@Z)
Debug/derive.exe   :   fatal   error   LNK1120:   2   unresolved   externals
Error   executing   link.exe.
derive.exe   -   3   error(s),   0   warning(s)


------解决方案--------------------
模板不允许分离编译,起码目前还没有支持模板分离编译的编译器
------解决方案--------------------
模板的所有东西都应该写在一个.h里。
具体就不要去深究了。
------解决方案--------------------
同上, VC_MFC里面是你贴的吧,这边也贴了啊,:)
------解决方案--------------------
模板不允许分离编译

学习。。。。
------解决方案--------------------
export关键字支持分离编译,C++标准,编译器不支持
------解决方案--------------------
说白了就是
template <typename T> tempcla <T> ::tempcla(T n){
a=n;
}
template <typename T> T tempcla <T> ::geta(){
return a;
}
这些动动放到 .h文件里去
------解决方案--------------------
在头文件里的最后把实现的文件包进去就可以了。

编译错误,是因为函数体没有具现,也就是说程序里根本就没有这个函数的代码。
当编译器遇到tempcla <int> c1(5);
它没有看到定义也就不会用int具现这个类,而编译器就假设这个定义在别的地方,就产生一个对它的引用,到连接的时候再决定这个引用指了什么东西。而当编译器遇到tempcla的定义时,又不知道用什么类型来具现它,就不会对它作处理。这样,刚才那个引用就找不到它所要指的东西,也就出现了上面的连接错误。