今天在处理书上的二叉树的时候,遇到了这样的问题:
连接器link 2019 & link 1120报错,在类里面声明的并且在类后面实现的友元函数printTree(),却报错了,查找了很多资料,才知道如何改正,下面提供两种思路
1.声明的友元函数直接在类里面实现`
比如像这样:
class binaryTree:{
...
friend void printTree(const binaryTree<T>&t, T flag) {
queue<T>q;
q.push(t.root->data);
cout << endl;
while (!q.empty()) {
char p, l, r;
p = q.front();
q.pop();
l = t.lchild(p, flag);
r = t.rchild(p, flag);
cout << p << " " << l << " " << r << endl;
if (l != '@')q.push(l);
if (r != '@')q.push(r);
}
}
...
}
``
2.在类定义前先对类进行预定义,并在其后声明函数
template<class T> class binaryTree ;
template<class T> void printTree(const binaryTree<T>&t, T flag);
但是,注意在类里面定义的时候要像这样定义
friend void printTree <> (const binaryTree<T> &t, T flag);
划重点!!! <> 不能少
以上的两种方式,编译可以通过,还请大家赐教,欢迎留言~