Y类的函数不是X的成员,但是X类是Y

时间:2015-07-08 17:59:17

标签: c++ tree binary-tree

有一个类似的问题,这个函数是一个带参数的运算符重载,这是主要的重点,这只会让我更加困惑。

我只是尝试在非空的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的朋友类,并且错误仍然存​​在(让两个类成为彼此的朋友)。

提前致谢。

1 个答案:

答案 0 :(得分:2)

您误解了friend声明的作用。说AB的朋友意味着A可以访问protected成员privateB成员。例如,它允许A调用private的{​​{1}}个函数。它不会以任何方式扩展BA的界面。

如果我理解了您正在尝试实现的目标,那么您应该可以通过B获取参数来实现这一目标:

size