模板二叉树类,root未定义。

lqbk5 2010-09-27 04:01:00
麻烦大家帮我看看,是哪里错了。

#include <iostream>
using namespace std;
template<typename T>
struct BTNode
{
BTNode():lChild(NULL),rChild(NULL)
{
}
BTNode(const T&x):element(x), lChild(NULL),rChild(NULL)
{
}
BTNode(const T&x,BTNode<T>* l,BTNode<T>* r):element(x), lChild(l),rChild(r)
{
}
//————————————————————————
T element;
BTNode<T>* lChild;
BTNode<T>* rChild;
};
//————————————————————二叉树类
template<typename T>
class Tree
{
public:
Tree():root(NULL){}
~Tree(){}
bool IsEmpty() const;
bool Root(T &x) const;
void maketree(const T &x, Tree<T>&left, Tree<T>&right);
void breaktree(const T &x, Tree<T>&left, Tree<T>&right);
void PreOrder(void(*vist)(T &x));
void InOrder(void(*vist)(T &x));
void PostOrder(void(*vist)(T &x));
void Clear();
protected:
BTNode<T>* root;
private:

void Clear(BTNode<T> *t);
void PreOrder(void(*vist)(T &x),BTNode<T> *t);
void InOrder(void(*vist)(T &x),BTNode<T> *t);
void PostOrder(void(*vist)(T &x),BTNode<T> *t);
};
template<typename T>
bool IsEmpty(){}
template<typename T>
bool Root(T &x)
{
if (root){ //错误出在这里,编译器说root未定义。
x = root->element;
return true;
}
else return false;

}
template<typename T>
void maketree(const T &x, Tree<T>&left, Tree<T>&right) {}
template<typename T>
void breaktree(const T &x, Tree<T>&left, Tree<T>&right) {}
template<typename T>
void PreOrder(void(*vist)(T &x)){}
template<typename T>
void InOrder(void(*vist)(T &x)){}
template<typename T>
void PostOrder(void(*vist)(T &x)){}
template<typename T>
void Clear(){}
template<typename T>
void Clear(BTNode<T> *t){}
template<typename T>
void PreOrder(void(*vist)(T &x),BTNode<T> *t){}
template<typename T>
void InOrder(void(*vist)(T &x),BTNode<T> *t){}
template<typename T>
void PostOrder(void(*vist)(T &x),BTNode<T> *t){}



int main()
{
BTNode<char> xx;
Tree<char> a,b,x,y,z;





system("pause");
return 0;
}

谢谢大家了~
...全文
85 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rainqin123 2010-09-27
  • 打赏
  • 举报
回复
我用6.0编译怎么就通过了??
lqbk5 2010-09-27
  • 打赏
  • 举报
回复

bool Tree<T>::Root(T &x)const
{
if (root){
x = root->element;
return true;
}
else return false;

}
lqbk5 2010-09-27
  • 打赏
  • 举报
回复
the same
  • 打赏
  • 举报
回复
如果在类里面定义的话,直接T &就可以,否则必须加上BTNode<T> ...
Jim_King_2000 2010-09-27
  • 打赏
  • 举报
回复


template<typename T>
bool Tree::Root(T &x) const
{
  • 打赏
  • 举报
回复
bool Root(BTNode<T> &x)
{
if (root){ //错误出在这里,编译器说root未定义。
x = root->element;
return true;
}
else return false;

}
lqbk5 2010-09-27
  • 打赏
  • 举报
回复
编译还是通不过。
Jim_King_2000 2010-09-27
  • 打赏
  • 举报
回复

template<typename T>   
bool Tree::Root(T &x)
{
gules 2010-09-27
  • 打赏
  • 举报
回复

template<typename T>
bool Root(const T &x) const // 这里加const
{
if (root){ //错误出在这里,编译器说root未定义。
x = root->element;
return true;
}
else return false;

}
lqbk5 2010-09-27
  • 打赏
  • 举报
回复
bool Root(T &x)
{
if (root){ //错误出在这里,编译器说root未定义。
x = root->element;
return true;
}
else return false;

65,210

社区成员

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

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