关于 函数模版 template 的问题,恳求大家帮忙

wengchaohui 2008-04-20 01:16:00
我现写一下关于一个简单的例子,我新建立
第一个源文件如下:
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;
请各位帮小弟想想办法 ,为什么第一个程序分为两个源文件没问题,而第二个程序就不行了呢?

...全文
107 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
UltraBejing 2008-05-01
  • 打赏
  • 举报
回复
有点难度哦
ysuliu 2008-04-21
  • 打赏
  • 举报
回复
学习
Cpp权哥 2008-04-21
  • 打赏
  • 举报
回复
函数模板如果要把声明和定义分开在几个文件中,要在声明上加export关键字,最好分行写成下面这样。
export
template <class T>
T add(T a,T b);
但是很多编译器不支持这个export,所以一般不提倡把函数模板的声明和定义分开。
wengchaohui 2008-04-21
  • 打赏
  • 举报
回复
就是说,在程序运行到cout < <add(a,b);时,就要调用 add函数,而在另一个源文件的template <class T>T add(T a,T b)
没有给他进行说明,不知道,自己该产生什么样的函数实例,,是这样吗?
MagiSu 2008-04-20
  • 打赏
  • 举报
回复
你可以这么想:
如果形成了一个带template<T>的函数在OBJ中,在链接的时候,这个T是什么才能得以确认,然而这不是连接器的工作。
fallening 2008-04-20
  • 打赏
  • 举报
回复
try this way

//1.cpp
#include <iostream.h>
export 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;
}
Supper_Jerry 2008-04-20
  • 打赏
  • 举报
回复
目前的编译器都不支持定义和实现分离。
你放在一个文件中当然没有分离了。
wengchaohui 2008-04-20
  • 打赏
  • 举报
回复
可是我试了一下,


#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;
}
template <class T>T add(T a,T b)
{
return a+b;
}
这样也可以呀,我没有将它放在头文件中也可以呀,,还请再指点一下,,
arong1234 2008-04-20
  • 打赏
  • 举报
回复
template的实现必须也放在头文件中,这是因为template函数不是一个真实的函数,编译器需要在编译时把它实例花成函数,这需要模板函数的完整定义,必须放在.h中

64,643

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧