C++ 继承模板类的undefined reference问题

zwphumor 2013-05-10 10:55:08
知道STL map set之类是用RBTree封装的,但是需要直接访问某一节点的左右子孩子或者父节点,然后一直不知道怎么用,所以自己就写了一棵树,但是考虑到代码复用,就用template

template<typename T>
class Tree
{
public:
Tree(T*,size_t);
int insert(const T) const;
void print(int mode) const;
...
protected:
virtual int comp(const T,const T)const;//引文考虑到insert什么的用到不同类型的比较,所以定义一个comp函数
......//一堆乱七八糟的
};

下面写了一个Test
class Test:public Tree<int>
{
public:
Test(int* arr,size_t len):Tree<int>(arr,len){}
};

main()
{
int t[]={...};
Tree<int>* test=new Test(t,sizeof(t)/sizeof(int));
test->print(XX);
}

g++编译时提示undefined reference Tree<int>::Tree<int>(int*,unsigned int)和undefined referenceTree<int>::print(int)什么的好烦人,不知道哪里写错了,大家帮忙看看是哪里的问题啊
感激不尽!!!!
...全文
494 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ri_aje 2013-05-10
  • 打赏
  • 举报
回复
c++ 模板不支持分离编译模型,把实现文件中的定义移到头文件中就行了。
zwphumor 2013-05-10
  • 打赏
  • 举报
回复
引用 1 楼 ri_aje 的回复:
说的是那些函数只有声明,没有定义,把他们的定义补上就行了。
在实现文件里面有过定义了,Tree<>那个类是经过Tree<int>测试过的没有问题,现在就是T可能会有些没有重载比较符号,所以继承实现comp函数,然后就出现这样的错误了
ri_aje 2013-05-10
  • 打赏
  • 举报
回复
说的是那些函数只有声明,没有定义,把他们的定义补上就行了。
zwphumor 2013-05-10
  • 打赏
  • 举报
回复
引用 3 楼 ri_aje 的回复:
c++ 模板不支持分离编译模型,把实现文件中的定义移到头文件中就行了。
啊真的是这样啊,太感谢了~给分!!

64,684

社区成员

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

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