急,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
...全文
178 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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>

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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