模板成员函数定义的问题

某大一菜鸟 2012-03-27 12:53:48
#ifndef BINARY_H
#define BINARY_H


template <typename Type>
class BinarySearchTree
{
public:
BinarySearchTree();
//BinarySearchTree(const BinarySearchTree&);
//~BinarySearchTree();

const Type& findMin() const;
const Type& findMax() const;
bool contains(const Type&);
void insert(const Type&);
void remove(const Type&);
void outPut();

private:
struct BinaryNode{
Type data;
BinaryNode *right, *left;

BinaryNode(const Type &initElement, BinaryNode *r = 0, BinaryNode *l = 0)
: right(r), left(l), data(initElement){}
};
BinaryNode *root;

bool contains(const Type&, BinaryNode*);
void insert(const Type&, BinaryNode*&);
void remove(const Type&, BinaryNode*&);
BinaryNode* findMin(BinaryNode*) const;
BinaryNode* findMax(BinaryNode*) const;

void InOrder(BinaryNode*) const;
void makeEmpty(BinaryNode *t);
};

//#include "BinarySearchTree.cpp"
#endif


小弟的问题是:如何在 .cpp文件中定义
BinaryNode* findMin(BinaryNode*) const;
这个函数

我这样写报错了:
template <typename Type>
BinarySearchTree<Type>::BinaryNode* BinarySearchTree<Type>::findMin(BinaryNode* t) const
{
if(t == 0)
return 0;//ERROR
if(t->left == 0)
return t;
else
return findMin(t->left);
}


求解!!
...全文
291 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
豆哥要做MT 2012-03-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 pengzhixi 的回复:]

返回值类型前面加上typename BinarySearchTree<Type>::BinaryNode*
[/Quote]

使用该方法,在CodeBlocks(g++)中编译通过!!!
ryfdizuo 2012-03-27
  • 打赏
  • 举报
回复
ls正解,关键字typename。
pengzhixi 2012-03-27
  • 打赏
  • 举报
回复
原因 google“模板参数依赖类型”
pengzhixi 2012-03-27
  • 打赏
  • 举报
回复
返回值类型前面加上typename BinarySearchTree<Type>::BinaryNode*
ri_aje 2012-03-27
  • 打赏
  • 举报
回复
这样写

template <typename Type>
typename BinarySearchTree<Type>::BinaryNode*
BinarySearchTree<Type>::findMin(typename BinarySearchTree<Type>::BinaryNode* t) const
{
if(t == 0)
return 0;//ERROR
if(t->left == 0)
return t;
else
return findMin(t->left);
}
羽飞 2012-03-27
  • 打赏
  • 举报
回复
template <typename Type>
BinarySearchTree<Type>::BinaryNode* BinarySearchTree<Type>::findMin(BinaryNode* t) const

最后一个BinaryNode没有加上限制
可以试试
某大一菜鸟 2012-03-27
  • 打赏
  • 举报
回复
已经考虑了分离编译的问题了...
是成员函数定义的问题..
fanster28_ 2012-03-27
  • 打赏
  • 举报
回复
名前支持模版export特性的编译器只有一个,(主流的vc,gcc都是不支持的),所以你看到的STL库的源代码,申明实现都在一个文件
某大一菜鸟 2012-03-27
  • 打赏
  • 举报
回复
自己顶!!!
PS:这段代码如果直接在类体内定义是可以跑起来的...

64,636

社区成员

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

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