高手们,难道template函数只能在头文件中定义?

wangshiqi 2002-12-15 03:43:10
我的程序如下:
头文件 test.h:
template <class T>
class test
{
public:
T x;
T f();
};

test.cpp文件:
#include "test.h"

template<class T>
T test<T> ::f()
{
return x;
}

结果在main()函数中这样调用就不行
main()
{
test<float> ttt;
ttt.f();
}
编译时链接出错,说
error LNK2001: unresolved external symbol "public: float __thiscall test<float>::f(void)" (?f@?$test@M@@QAEMXZ)

但是:
如果把函数的定义写在.h中,同时去掉cpp中的定义,就一切正常了。
头文件 test.h:
template <class T>
class test
{
public:
T x;
T f(){return x;};
};
为什么???????????????
...全文
395 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
liushmh 2002-12-15
  • 打赏
  • 举报
回复
是的,对于vc来说
要分开写(就象你那样),除非编译器支持export关键字。
c++ primer上写过了的。
yj1804 2002-12-15
  • 打赏
  • 举报
回复
可以吧,我的好像没问题呀
wangshiqi 2002-12-15
  • 打赏
  • 举报
回复
CCLIS(www.cclis.com) :CPP中的template<class T>去掉是肯定不行的。
flyycyu 2002-12-15
  • 打赏
  • 举报
回复
在cpp里面定义,实际上这个cpp的文件的作用
就和头文件没有什么区别了,你必须当作头文件
来对待它

c++里面有一个import吧(我记不住了,好像是的)
就是用来把template放到cpp里面,不过现在
没有编译器支持!
lkcowboy 2002-12-15
  • 打赏
  • 举报
回复
在cpp里一样可以定义
myblind 2002-12-15
  • 打赏
  • 举报
回复
在cpp里一样可以定义。

你的代码一定有些问题。

把定义和函数都写在 main 前面试一下。
CCLIS 2002-12-15
  • 打赏
  • 举报
回复
扔CPP中的template<class T>去掉试试看。
WuYL7812 2002-12-15
  • 打赏
  • 举报
回复
我以前试过,就是这样的。我看了C++里的Vector, list等等都是把的类的声明和类函数实现都放在一个文件里。
嵌云阁主 2002-12-15
  • 打赏
  • 举报
回复
可以不用export
在.cpp文件中添加一个无用的函数如
void _no_use()
{
test<float> a;
a.f();
}
添加这个函数之后,就不会有链接错误了。
如果要使用double类型,将此函数中的float改为double就行了。
jp311 2002-12-15
  • 打赏
  • 举报
回复
为什么C++ BUILDER里有export关键字,可是完全不是一个意思呢???
有没有一个支持ISO C++到99.99%的编译器(当然不是指下一代的VC++)
cwanter 2002-12-15
  • 打赏
  • 举报
回复
现在就没有编译器支持export。可以写在CPP文件中,不过要用#include "*.cpp",跟写在头文件中一样。
wangshiqi 2002-12-15
  • 打赏
  • 举报
回复
莫非VC有这个bug?
怎么有人行,有人不行?
rainy14f 2002-12-15
  • 打赏
  • 举报
回复
我就是写在CPP里面的啊,没问题!
我用的是XP+VC6.0
coader 2002-12-15
  • 打赏
  • 举报
回复
VC应该不支持的,我当时也只好写在.h文件中
北极猩猩 2002-12-15
  • 打赏
  • 举报
回复
可以使用export来实现模板的生命与实现的分离,但是现在很多流行的编译器不支持export。
wangshiqi 2002-12-15
  • 打赏
  • 举报
回复
我现在这样想,可以把template 看成一个功能强大的 宏定义。
那么,他一定要出现在 头文件中
就这样子了。

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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