C++带模板的函数在头文件中定义,在源文件中实现为什么老报错?

jevenabc 2014-07-30 03:26:56
这是头文件test.h里的代码:
template <class T>
class test
{
private:
T a,b;
public:
test();
test(T a,T b);
void output();
};

这是源文件test.cpp里的代码:
#include "test.h"
#include <iostream>
using namespace std;

template <class T>
test<T>::test()
{
a=0;
b=0;
}

template <class T>
test<T>::test(T aa,T bb)
{
a=aa;
b=bb;
}
template <class T>
void test<T>::output()
{
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
}

主函数main.cpp里的代码:
#include <iostream>
#include "test.h"
using namespace std;
void main()
{
int a,b;
cin>>a>>b;
test<int> tt(a,b);
tt.output();
}

编译错误如下:
1> test.cpp
1>main.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall test<int>::test<int>(int,int)" (??0?$test@H@@QAE@HH@Z),该符号在函数 _main 中被引用
1>main.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall test<int>::output(void)" (?output@?$test@H@@QAEXXZ),该符号在函数 _main 中被引用
1>D:\C++\test730\Debug\test730.exe : fatal error LNK1120: 2 个无法解析的外部命令

不带模板,就不会报错,请大神指教,谢谢
...全文
1061 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
恋喵大鲤鱼 2016-11-20
  • 打赏
  • 举报
回复
请参考的博客:http://blog.csdn.net/k346k346/article/details/49500635。这里说了函数模板找不到定义的解决办法!
恋喵大鲤鱼 2016-11-20
  • 打赏
  • 举报
回复
请参考的博客:http://blog.csdn.net/k346k346/article/details/49500635。这里说了函数模板找不到定义的解决办法!
ssliushengyu 2016-08-12
  • 打赏
  • 举报
回复
这个设定真的恶心!那不是只要使用模板就不能使用多文件了嘛。。。。
SiGoYi 2014-07-30
  • 打赏
  • 举报
回复
写模板要把声明和实现全部在“.h”中实现,否则就会报错,初学时我也遇上过这种情况!:)
shiguojie19892 2014-07-30
  • 打赏
  • 举报
回复
引用 2 楼 lisong694767315 的回复:
C++要求模板的声明和实现对引用者必须都可见,模板的声明和实现要放到一个文件里,都写在.h文件里
卸载退文件里
神奕 2014-07-30
  • 打赏
  • 举报
回复
C++要求模板的声明和实现对引用者必须都可见,模板的声明和实现要放到一个文件里,都写在.h文件里
Coder_Y_Jao 2014-07-30
  • 打赏
  • 举报
回复
模板不要分离编译

64,654

社区成员

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

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