如何在类的方法参数中访问类私有数据成员,我得到一个错误,错误地使用了非静态数据成员

维斯鲁特

我有两个类Node和AvlTree,稍后我将使用AvlTree的其他方法,但是我无法root在其自己的类中访问rootAvlTree的数据成员,如何在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);
  }
  

另外,与您的问题无关,在Nodes构造函数中隐藏成员名称(例如,key用于初始化名为的成员的自变量key)不是一个好主意,因为很容易就代码的作用误导人类读者。因此,通常认为最好将参数的名称与成员的名称不同。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在另一个类的静态成员函数中访问私有静态变量?

为什么我们可以使用指针访问私有数据成员类,而不使用类中的其他成员,朋友功能?

如何从同一个类的静态函数访问一个类的私有成员?

我如何获得一个类成员函数以访问另一个类成员函数的私有成员?

返回带有另一个类的数据成员的构造函数?获取转换错误?

指向类的私有数据成员的指针

在同一个类中具有静态和非静态方法是否错误?

如何通过反射访问私有方法和私有数据成员?

如何停止访问私有数据成员?

如何在c ++中将一个函数的数据成员访问到同一类中的另一个函数

无效使用非静态成员函数-类成员函数调用另一个类成员函数

如何修复C ++中的“错误:无效使用非静态数据成员'tree :: root'”错误?

如何设置静态类的私有静态只读数据成员?

错误:“必须调用对非静态成员函数的引用”在使用类时没有得到解决

通过私有成员访问同一个类的私有成员变量

如果我们可以使用访问器访问私有数据成员,那么为什么我们不能访问私有方法呢?

单例模式语法错误静态字段未命名非静态数据成员或基类

在将类封装在名称空间中之后,Friend函数无法再访问类的私有数据成员

如何从同一类中的方法访问类数据成员?

如何在python数据类的默认参数中访问另一个参数?

在静态方法中访问类的静态成员

在Java中访问另一个类的数据成员的字段

我试图在一个类中实现抽象类和接口,并且仅调用了接口成员,而抽象方法没有?

在类定义和静态数据的使用之外定义私有成员函数

如何在带有私有构造函数的类中测试此静态成员?

如何修复Unreal和C ++中的“无法访问在类中声明的私有成员”错误

如何将类的非静态方法传入类的数据成员的构造函数

代码错误:“不是非静态数据成员或基类”

从静态成员函数访问私有非静态类变量 - C++