急,error LNK2001问题

cris919 2006-12-30 01:52:19
实现一个简单的模板类,出现LNK2001错误,各位大哥指定一下!
类界面如下
template <class T> class vector
{
public:
vector(unsigned numElements);
virtual ~vector();
...
protected:
T *data;
unsigned size;
};
实现如下
template <class T> vector<T>::vector(unsigned num):size(num)
{
data=new T[size];
assert(data!=0);
}
如果main()中不使用该模板类一切正常,
如果写上vector<int> iv(20);就出现以下错误
vectormain.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall vector<int>::~vector<int>(void)" (??1?$vector@H@@UAE@XZ)
vectormain.obj : error LNK2001: unresolved external symbol "public: __thiscall vector<int>::vector<int>(unsigned int)" (??0?$vector@H@@QAE@I@Z)
Debug/vectormain.exe : fatal error LNK1120: 2 unresolved externals
...全文
125 点赞 收藏 14
写回复
14 条回复
ProgrameMan 2006年12月30日
帖子在那里 呵呵
回复 点赞
cris919 2006年12月30日
ProgrameMan(我要学汇编) 等会到新贴子领分100。(讲的有点简单,暂给100)
回复 点赞
ProgrameMan 2006年12月30日
这涉及到模板的分离编译模式,就是把定义和实现放在不同的文件里,在《c++primer》 3rd里有讲到。本来看似很简单的一个问题,实际上要编译器来做的话还是比较困难的,网上有这方面的资料。
回复 点赞
ProgrameMan 2006年12月30日
因为这是编译器的原因,目前编译器很少有支持模版类声明和实现分离的,如果还想了解更深层次的原因可以看看有关c++编译方面的东西,记得有一本书中说了原因,总之这是编译器的一个不足之处。
回复 点赞
cris919 2006年12月30日
谁告诉我为什么?我再给200分。
回复 点赞
cris919 2006年12月30日
问题解决,谢谢了!
回复 点赞
ProgrameMan 2006年12月30日
template <class T> vector<T>::vector(unsigned num):size(num)
{
data=new T[size];
assert(data!=0);
}



template <class T> vector<T>::~vector()
{
delete []data;
data=0;
size=0;
}


和类的定义放在一个文件中了吗?

如果没有请都放到头文件中
回复 点赞
superarhow 2006年12月30日
常有的事。把实现放到头文件里吧。至于为什么,不必深究。
回复 点赞
cris919 2006年12月30日
virtual ~vector();有实现的,我没贴出来

template <class T> vector<T>::~vector()
{
delete []data;
data=0;
size=0;
}
回复 点赞
ProgrameMan 2006年12月30日


virtual ~vector();

改成

virtual ~vector() { };
回复 点赞
ProgrameMan 2006年12月30日
virtual ~vector();

没实现,编写实现看看
回复 点赞
cris919 2006年12月30日
实现时template <class T> vector<T>是对的
回复 点赞
Elysium 2006年12月30日
模版类使用不合法
回复 点赞
ralphvsclark 2006年12月30日
实现的时候template <class T> vector后面不加<T>
回复 点赞
发动态
发帖子
VC/MFC
创建于2007-09-28

7898

社区成员

42.1w+

社区内容

VC/MFC相关问题讨论
社区公告
暂无公告