有一个类似的问题,这个函数是一个带参数的运算符重载,这是主要的重点,这只会让我更加困惑。
我只是尝试在非空的Node对象上调用的树类上执行一个简短的递归函数,以便分别遍历树的子节点。
我的班级声明是这样的:
template<class T>
class BTNode {
template<class I>
friend class BST;
T data;
BTNode<T>* left_;
BTNode<T>* right_;
...
}
template<class I>
class BST {
BTNode<I>* root_;
BTNode<I>* curr_;
BTNode<I>* parent_;
int currSize = 0;
public:
size_t size() const {
if (root_ == NULL) {
return currSize;
}
else {
BTNode<I>* left_ = root_->getLeft();
BTNode<I>* right_ = root_->getRight();
if (left_ != NULL)
currSize += left_->size();
if (right_ != NULL)
currSize += right_->size();
}
return currSize;
}
...
};
目前的错误是:
'size()': is not a member of 'BTNode<I>'
到目前为止,我已经尝试使BTNode成为BST的朋友类,并且错误仍然存在(让两个类成为彼此的朋友)。
提前致谢。
答案 0 :(得分:2)
您误解了friend
声明的作用。说A
是B
的朋友意味着A
可以访问protected
成员private
和B
成员。例如,它允许A
调用private
的{{1}}个函数。它不会以任何方式扩展B
或A
的界面。
如果我理解了您正在尝试实现的目标,那么您应该可以通过B
获取参数来实现这一目标:
size