模板

zhangcaddie 2004-04-15 05:36:38
类模板函数的定义可以定义在类体的外部,那我得程序定义在外部有问题,请问是怎么回事?比如Stack.h:
template<class T>class Stack
{ T* date;
public:
Stack(int n);
~Stack();
};
我想把实现写在类外部,即Stack.cpp:
#include "stack.h"

//template<class T> Stack<T>;

template<class T> Stack<T>::Stack(int n)
{
date=new T[n];}
template<class T> Stack<T>::~Stack()
{
delete[] date;
}
这样为什么会出现编译错误:
ompiling...
stack.cpp
Linking...
main.obj : error LNK2001: unresolved external symbol "public: __thiscall Stack<int>::~Stack<int>(void)" (??1?$Stack@H@@QAE@XZ)
main.obj : error LNK2001: unresolved external symbol "public: __thiscall Stack<class complex>::~Stack<class complex>(void)" (??1?$Stack@Vcomplex@@@@QAE@XZ)
main.obj : error LNK2001: unresolved external symbol "public: __thiscall Stack<class complex>::Stack<class complex>(int)" (??0?$Stack@Vcomplex@@@@QAE@H@Z)
main.obj : error LNK2001: unresolved external symbol "public: __thiscall Stack<int>::Stack<int>(int)" (??0?$Stack@H@@QAE@H@Z)
Debug/stack.exe : fatal error LNK1120: 8 unresolved externals
Error executing link.exe.

stack.exe - 5 error(s), 0 warning(s)

而如果我把实现写在类内部就可以编译成功,或者把实现写在Stack.h文件里,但是在累得外部,也不会出问题!这是为什么那?应该怎么把类模板的实现写在另外的文件里?
...全文
28 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ToIP 2004-04-15
  • 打赏
  • 举报
回复
我用的DEV-C++啊
kingmirth 2004-04-15
  • 打赏
  • 举报
回复
模板当然支持分离编译,是你的编译器不支持
happlyman 2004-04-15
  • 打赏
  • 举报
回复
是因为编译器不支持分离编译,再说你写的也不对,应该在定义前面加上export
Wolf0403 2004-04-15
  • 打赏
  • 举报
回复
模板不支持分离编译!放在一个文件里面

64,646

社区成员

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

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