gpt4 book ai didi

c++ - 类 Y 的函数不是 X 的成员,但类 X 是 Y 的友元

转载 作者:行者123 更新时间:2023-11-28 02:24:11 24 4
gpt4 key购买 nike

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

我只是想在一个树类上执行一个简短的递归函数,该函数在非空 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 的 friend 类,但错误仍然存​​在(让两个类成为彼此的 friend )。

提前致谢。

最佳答案

你误会了什么friend声明做。说 AB的 friend 意味着 A获得对 protected 的访问权和 private B的成员.它允许 A调用private B的功能, 例如。它不扩展 A 的接口(interface)或 B以任何方式。

如果我正确理解了您要实现的目标,那么您应该可以通过 size 来实现。取一个参数:

template<class I>
class BST {
BTNode<I>* root_;
BTNode<I>* curr_;
BTNode<I>* parent_;

public:

size_t size() const {
return size_(root_);
}

private:
static size_t size_(const BTNode<I> *node) {
if (node == NULL) {
return 0;
}
else {
return 1 + size_(node->getLeft()) + size_(node->getRight());
}
}

...

};

关于c++ - 类 Y 的函数不是 X 的成员,但类 X 是 Y 的友元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31300221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com