一个奇怪的现象

prettyboybaoxiaopeng 2009-10-29 06:02:10
先看代码
//baohan.h
template <class T>
class A
{
public:
T fun(T);
};

//baohan.cpp
#include "baohan.h"

template <class T>
T A<T>::fun(T n)
{
return n+2;
}

//main.cpp
#include "baohan.h" //<--改变这里
#include "iostream.h"
void main()
{
A<int> a;
cout<<a.fun(3)<<endl;
}

连接处现以下错误
--------------------Configuration: baohan - Win32 Debug--------------------
Compiling...
main.cpp
Linking...
main.obj : error LNK2001: unresolved external symbol "public: int __thiscall A<int>::fun(int)" (?fun@?$A@H@@QAEHH@Z)
Debug/baohan.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

baohan.exe - 2 error(s), 0 warning(s)


把 #include "baohan.h" //<--改变这里
改成 #include "baohan.cpp" 后连接运行成功得到想要结果

问题是以前不一直是包含头文件就行了吗,难道是用了类模板的原因?
不用类模板时,是只要包含头文件的。
...全文
81 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
谢谢大家,分不多啊,不好意思
xlttap 2009-10-29
  • 打赏
  • 举报
回复
类模板是在把.h和.cpp一起包含起来的。
pcboyxhy 2009-10-29
  • 打赏
  • 举报
回复
export只有极其非主流的编译器支持,名字我忘了
模版声明和定义必须在同一个编译单元
老邓 2009-10-29
  • 打赏
  • 举报
回复
如果楼主用VC、GCC,就别想了。
模板类的实现,只能写在头文件中。
jackyjkchen 2009-10-29
  • 打赏
  • 举报
回复
参见C++ Primer里的模板实例化方式,两种方式,1楼说的两个方法属于一种方式,另一种要加个关键字,忘了,但是貌似大多数编译器都不支持
CodeSpy 2009-10-29
  • 打赏
  • 举报
回复
大部分的编译器要求模板的实现要放在头文件中。
jackyjkchen 2009-10-29
  • 打赏
  • 举报
回复
模板不能使用h和cpp分离的方式来定义,要么include cpp,要么在头文件里写一块儿

64,637

社区成员

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

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