模板函数声明、定义、引用问题

jiangwf 2004-12-27 06:38:49
模板函数声明、定义、引用有什么要注意的问题么??
-- mylib.h --

template <class T>
T max_v(T v1, T v2);

-- mylib.cpp --

#include "mylib.h"

template <class T>
T max_v(T v1, T v2)
{
return (v1 > v2 ? v1 : v2);
}

-- mylibtest.cpp --

#include "mylib.h"

int main()
{
std::cout << max_v(2, 4) << std::endl;
system("pause");
return 0;
}

使用g++编译器,提示“undefined reference to `int max_v<int>(int, int)'”
但是如果将template<class T> T max_v(T v1, T v2)的定义放到mylibtest.cpp中就可以通过

请各位xdjm指点一二 ......
...全文
226 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangwf 2004-12-29
  • 打赏
  • 举报
回复
谢谢各位大虾
Ant_Caesar 2004-12-27
  • 打赏
  • 举报
回复
已解
liem 2004-12-27
  • 打赏
  • 举报
回复
现在的编译器好像还不支持模板声明与模板实现的分离
将它们放在同一头文件里吧。
oyljerry 2004-12-27
  • 打赏
  • 举报
回复
模板申明定义都放h文件中
hawkxjy 2004-12-27
  • 打赏
  • 举报
回复
模板函数的声明定义要放在头文件中,不可以分开放在.h和.cpp中。

同样,在一个类中将一个成员函数定义为函数模板时也是要遵从这个规则:实现要放在头文件里
avalonBBS 2004-12-27
  • 打赏
  • 举报
回复
包含编译
fuyp 2004-12-27
  • 打赏
  • 举报
回复
函数模板是编译时自动生成各种类型的函数实例,如同内联函数,编译时其实现必须可见,一般其实现应该包含在头文件中~~

64,671

社区成员

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

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