如何在 class 的方法参数中访问 class 私有数据成员,我收到非静态数据成员无效使用错误

how to access class private data members in method parameter of class , i get an error invalid use of non static data members

我有两个 classes Node 和 AvlTree ,我稍后会制作 AvlTree 的其他方法,但我无法访问 AvlTree 自己的 root 数据成员 class ,我如何在 AvlTree class inOrder 方法中访问 root

我的代码如下

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 但这也不起作用,我在这里做错了什么,我也不能在它自己的 class 中这样访问。 我收到类似

的错误
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 构造函数中成员名称的隐藏(例如,用于初始化名为 key 的成员的名为 key 的参数)不是好主意,因为很容易就代码的作用误导人类读者。因此,通常认为以与成员不同的方式命名参数更可取。