读书人

关于 函数模版 template 的有关问题

发布时间: 2012-02-07 17:45:36 作者: rapoo

关于 函数模版 template 的问题,恳求大家帮忙
我现写一下关于一个简单的例子,我新建立
第一个源文件如下:
1.cpp
#include<iostream.h>
int add(int a, int b);
int main()
{int a=3,b=4;
cout<<add(a,b);
return 0;
}
第二个源文件
2.cpp
int add(int a,int b)
{
return a+b;
}
然后将他们连接起来没有问题。
后来我在想函数模版是不是也可以,于是我新建了一个程序,相当于将上面的两个源文件换为了:
1.cpp
#include<iostream.h>
template<class T>T add(T a,T b);
int main()
{int a=3,b=4;
cout<<add(a,b);
return 0;
}
2.cpp
template<class T>T add(T a,T b)
{
return a+b;
}

这是将他们执行的时候就出现了问题,好像是什么 unsolveble external;
请各位帮小弟想想办法 ,为什么第一个程序分为两个源文件没问题,而第二个程序就不行了呢?



[解决办法]
template的实现必须也放在头文件中,这是因为template函数不是一个真实的函数,编译器需要在编译时把它实例花成函数,这需要模板函数的完整定义,必须放在.h中

[解决办法]
你可以这么想:
如果形成了一个带template<T>的函数在OBJ中,在链接的时候,这个T是什么才能得以确认,然而这不是连接器的工作。
[解决办法]
函数模板如果要把声明和定义分开在几个文件中,要在声明上加export关键字,最好分行写成下面这样。
export
template <class T>
T add(T a,T b);
但是很多编译器不支持这个export,所以一般不提倡把函数模板的声明和定义分开。

读书人网 >C++

热点推荐