帮我看看这段代码吧,为什么一用模版就出错?

palm_civet 2005-11-25 10:22:15
我用的是VC 6.0

template <class Type>
class BinTreeNode
{
friend class BinaryTree<Type>;

private:
BinTreeNode<Type> *leftChild,*rightChild;
Type data;
public:
BinTreeNode() {
leftChild=0;
rightChild=0;
}
BinTreeNode(Tpye d,BinTreeNode<Type> *left,BinTreeNode<Type> *right) {
data=d;
leftChild=left;
rightChild=right;
}
Type &GetData() {return data;}
BinTreeNode<Type> *GetleftChild() {return leftChild;}
BinTreeNode<Type> *GetrightChild() {return rightChild;}
void SetData(Type d){data=d;}
void SetLeftChild(BinTreeNode<Type> *L) {left=L;}
void SetRightChild(BinTreeNode<Type> *R) {right=R;}
};

template <class Type>
class BinaryTree
{

private:
BinTreeNode<Type> *root;

private:
BinTreeNode<Type> *Parent(BinTreeNode<Type> *r,BinTreeNode<Type> *p){
BinTreeNode<Type> *q;
if(r==0) return 0;
if(r->GetleftChild()==p||r->GetrightChild()==p) return r;
if(q=Parent(r->GetleftChild(),p)!=0) return q;
else return Parent(r->GetrightChild(),p);
}
void destory(BinTreeNode<Type> *p) {
if(p!=0) {
destory(p->GetleftChild());
destory(p->GetrightChild());
delete p;
}
}
void PreOrder(BinTreeNode<Type> *r) {
if(r!=0) {
cout <<r->GetData() <<" ";
PreOrder(r->GetleftChild());
PreOrder(r->GetrightChild());
}
}
void InOrder(BinTreeNode<Type> *r) {
if(r!=0) {
InOrder(r->GetleftChild());
cout <<r->GetData() <<" ";
InOrder(r->GetrightChild());
}
}
void PostOrder(BinTreeNode<Type> *r) {
if(r!=0) {
PostOrder(r->GetleftChild());
PostOrder(r->GetrightChild());
cout <<r->GetrightChild()) <<" ";
}
}

public:
BinaryTree():root(0){}
BinaryTree(Type d):root(d){}
virtual ~BinaryTree() {destory(root);}
bool IsEmpty() {root=0?1:0;}
BinTreeNode<Type> *Root() {return root=0?0:root;}
void CreateRoot(Type d) {data=d;}
BinTreeNode<Type> *Parent(BinTreeNode<Type> *p) {return Parent(root,p);}
BinTreeNode<Type> *LeftChild(BinTreeNode<Type> *p) {return p->GetleftChild();}
BinTreeNode<Type> *RightChild(BinTreeNode<Type> *p) {return p->GetrightChild();}

BinTreeNode<Type> *LeftSibling(BinTreeNode<Type> *p) {
BinTreeNode<Type> *q=Parent(root,p);
if(p==q->GetleftChild()||q->GetrightChild()==0) return 0;
else return q->GetleftChild();
}

BinTreeNode<Type> *RightSibling(BinTreeNode<Type> *p) {
BinTreeNode<Type> *q=Parent(root,p);
if(p==q->GetrightChild()||q->GetleftChild()==0) return 0;
else return q->GetrightChild();
}

Type Retrieve(BinTreeNode<Type> *p) {return p->GetData();}
void Assign(BinTreeNode<Type> *p,Type d) {p->SetData(d);}

void InsertLeftChild(BinTreeNode<Type> *p,Type d) {
BinTreeNode<Type> *q=new BinTreeNode<Type>(d);
q->SetLeftChild(p->GetleftChild);
p->SetLeftChild(q);
}

void InsertRightChild(BinTreeNode<Type> *p,Type d) {
BinTreeNode<Type> *q=new BinTreeNode<Type>(d);
q->SetrightChild(p->GetrightChild);
p->SetRightChild(q);
}

void DeleteLeftChild(BinTreeNode<Type> *p) {destory(p->GetleftChild());}
void DeleteRightChild(BinTreeNode<Type> *P) {destory(p->GetrightChild());}
void PreOrder() {PreOrder(root);}
void InOrder() {InOrder(root);}
void PostOrder() {PostOrder(root);}
...全文
101 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
palm_civet 2005-11-26
  • 打赏
  • 举报
回复
问题解决了,谢谢
csucdl 2005-11-26
  • 打赏
  • 举报
回复
注意模板类是一类类
csucdl 2005-11-26
  • 打赏
  • 举报
回复
模板类作为类的友元时, 需要前视声明

在定义BinTreeNode类的前面加上

template <class type>
class BinaryTree;
cunsh 2005-11-26
  • 打赏
  • 举报
回复
把那两行加到开头试试看.
ma100 2005-11-25
  • 打赏
  • 举报
回复
你在使用前没有声明呀,定义是在使用的后面
palm_civet 2005-11-25
  • 打赏
  • 举报
回复
template <class Type>
class BinaryTree;//没声明

这个是什么意思啊?我已经声明了啊
ma100 2005-11-25
  • 打赏
  • 举报
回复
void InOrder() {InOrder(root);}
void PostOrder() {PostOrder(root);}
};/***///没加 }

/****/
BinTreeNode(Type d,//拼错了


template <class Type>
class BinaryTree;//没声明


template <class Type>
class BinTreeNode
{
friend class BinaryTree<Type>;

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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