C++ 从类中使用get方法返回指针,并使用*&递归地接收它

C++ 从类中使用get方法返回指针,并使用*&递归地接收它,c++,C++,所以我只是在写一些代码,有点难堪 我有一个类节点和另一个类二进制树: class Node { public: Node(); Node(int thedata, Node* right, Node* left):data(thedata), right_pointer(right), left_pointer(left){}; int get_data(){return data;} Node* get_right() {return right_point

所以我只是在写一些代码,有点难堪

我有一个类节点和另一个类二进制树:

class Node
{
public:
    Node();
    Node(int thedata, Node* right, Node* left):data(thedata), right_pointer(right),   left_pointer(left){};
    int get_data(){return data;}
    Node* get_right() {return right_pointer;}
    Node* get_left() {return left_pointer;}
private:
    int data;
    Node* right_pointer;
    Node* left_pointer;
};

class BinaryTree
{
private:
    Node* root;
    void add_tree_node(Node*& root,int data);
    void print_tree(Node* root);
public:
    BinaryTree();
    void print_tree();
    void add_tree_node(int data); 
 };
我的问题是这个命令:

添加树节点操作->获取正确的数据

我得到一个错误:没有重载函数的实例。 哪个get_right返回指向指针的指针,并且想知道是否有更好的方法来代替下面的两个选项

当我这样做时: Node*right=root->get\u right; 添加_tree_noderlight、数据

添加树节点运行->右链接,数据

它能工作,我理解它为什么能工作,因为我们传递的是指针本身,而不是值。

节点->右键返回一个右值。添加树节点采用非常量引用。只能对左值进行非常量引用,而不能对右值进行非常量引用。因此,node->get_right的返回值不能转换为非常量引用,除非先将其放入局部变量中


这就是说,为什么add_tree_节点从引用开始?它已经有了一个指针,所以你可以随意改变节点,而不需要引用。

听起来你需要一个插入&节点,数据函数 然后在main中,您可以使用构造函数创建一个新的二叉树,如下所示:Node binaryTree=new Node;
从那里,您可以像这样插入节点:binaryTree->insert binaryTree,data

您的问题是此方法符号void add_tree_nodeNode*&root,int data;,你认为它应该做什么呢?我是通过引用来做的,因为我相信唯一可以对根指针进行更改的方法。我以为我必须使用**或*&当我只使用*时,表实际上不会更新。@BehdadJamshidi:大概你是通过设置左指针或右指针来添加节点,是吗?你可以用Node*@BehdadJamshidi:哦,我想我明白了。您正试图修改传入的指针。@BehdadJamshidi:使用get_right的唯一方法是更改get_left和get_right以直接返回引用。谢谢,这正是我想要的,谢谢,这很有效
Node* &get_right() {return right_pointer;}
Node* &get_left() {return left_pointer;}