我有两个类Node和AvlTree,稍后我将使用AvlTree的其他方法,但是我无法root
在其自己的类中访问root
AvlTree的数据成员,如何在AvlTree类inOrder
方法中进行访问。
我的代码在这里
class Node {
public:
int key;
Node* left;
Node* right;
int height;
Node(int key) : key(key) , left(nullptr) , right(nullptr) , height(1) {};
};
class AvlTree {
private:
Node* root;
public:
AvlTree() : root(nullptr) {};
int height(Node* ptr) {
}
int getBalanceFactor(Node* ptr) {
}
void inOrder(Node* itr = root) { // <--- i get an error here
}
};
我试过了,this->root
但是那也行不通,我在这里做错了什么,在自己的课堂上我也不能像这样访问。我有一个错误
09_avl_tree.cpp:36:34: error: invalid use of non-static data member ‘AvlTree::root’
36 | void inOrder(Node* itr = root) {
| ^~~~
09_avl_tree.cpp:15:15: note: declared here
15 | Node* root;
| ^~~~
我不想root
成为静态数据成员。因为我想要AvlTree的多个实例。
编译器告诉您的简短答案是,您不能将其作为参数的默认值。
最简单的方法是重载inOrder()
函数,例如(在的定义内AvlTree
)
void inOrder(Node *itr)
{
// whatever
}
void inOrder()
{
inOrder(root);
}
另外,与您的问题无关,在Node
s构造函数中隐藏成员名称(例如,key
用于初始化名为的成员的自变量key
)不是一个好主意,因为很容易就代码的作用误导人类读者。因此,通常认为最好将参数的名称与成员的名称不同。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句