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() はポインターへのポインターを返し、以下の 2 つのオプションの代わりにこれを行うためのより良い方法があるかどうか疑問に思っていました。

これを行うと: Node* right = root->get_right(); add_tree_node(右、データ);

また

add_tree_node(root->right_link,data);

それは機能し、値ではなくポインター自体を渡しているため、機能する理由を理解しています。

4

3 に答える 3

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 に答える
0

node->get_right()右辺値を返します。add_tree_node()非 const 参照を取ります。右辺値ではなく、左辺値からのみ非 const 参照を作成できます。node->get_right()したがって、最初にローカル変数に入れない限り、の戻り値を非 const 参照に変換することはできません。

add_tree_node()とは言うものの、そもそも参照を取得するのはなぜでしょうか? すでにポインターを取得しているためNode、参照を必要とせずに必要なものをすべて変更できます。

于 2013-03-13T22:07:28.107 に答える