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;}