1

所以我只是在写一些代码,有点难倒自己

我有一个类 Node 和另一个类 BinaryTree:

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

我的问题是这个命令:

add_tree_node(root->get_right(), 数据);

我收到一条错误消息:没有重载函数的实例。其中 get_right() 返回一个指向该指针的指针,并且想知道是否有更好的方法来代替下面的两个选项。

当我这样做时: Node* right = root->get_right(); add_tree_node(右,数据);

或者

add_tree_node(root->right_link,data);

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

4

3 回答 3

0

node->get_right()返回一个右值。add_tree_node()接受非常量引用。您只能从左值而不是右值中进行非常量引用。因此,除非您先将其放入局部变量,否则 的返回值node->get_right()不能转换为非常量引用。

就是说,为什么要先add_tree_node()引用呢?它已经使用了一个指针,因此您可以在Node不需要引用的情况下改变您想要的所有内容。

于 2013-03-13T22:07:28.107 回答
0

在我看来,您需要一个 insert( & node, data) 函数,
然后在您的主程序中,您可以使用构造函数创建一个新的二叉树,如下所示: Node
binaryTree = new Node();
从那里,您可以像这样插入节点: binaryTree->insert( binaryTree, data );

于 2013-03-13T22:08:16.753 回答
0
Node* &get_right() {return right_pointer;}
Node* &get_left() {return left_pointer;}
于 2013-03-13T22:53:29.737 回答