2

二分木実装用のノード クラスを構築しようとしています。Node クラスのヘッダー ファイルは次のとおりです。

class Node {
public:
    Node();
    Node(int value);
    void setParent(Node& parent);
    void setLeftChild(Node& child);
    void setRightChild(Node& child);
    void setValue(int value);
    void setIndex(int index);
    void setHeight(int height);
private:
    int value;
    Node& parent;
    Node& leftChild;
    Node& rightChild;
    int height;
    int index;
};

ここで、上で宣言したコンストラクタ Node(int value) を書きたいと思います。leftChild、rightChild、parent フィールドを初期化するにはどうすればよいですか? それらはノードでもあるため、デフォルトのコンストラクターを呼び出したいのですが、機能していないようです。Node::Node(int value) : 値(値)、親()、左子()、右子(){ }

コンパイラは、「タイプ 'Node' への参照には初期化子が必要です」と言っています

ありがとう。

4

3 に答える 3

0

この場合、参照にポインタを使用し、それらを NULL に初期化するのが理にかなっています。これを行うことで、NULL ポインターをチェックすることで、ノードに子または親がある (つまり、ルート ノードではない) かどうかをチェックすることもできます。また、デストラクタを追加してメモリの割り当てを解除してください。

于 2013-07-08T20:23:50.857 に答える
0

ノードの親を指定するコンストラクターを使用する必要があります: Node(Node *parent, int value); ルート ノードを作成するときは、パラメータとして NULL を指定してこのコンストラクタを呼び出すだけです。親と子への参照はすべてポインタでなければなりません。

于 2013-07-08T20:13:07.143 に答える
0

Node*参照 ( ) の代わりにポインター ( ) を使用することをお勧めしますNode&。コンストラクターでは、それらに割り当てるだけnullptrです。

オブジェクトを参照するには、参照が必要です (明らかに、左または右の子がない場合は参照できません)。したがって、ポインターはあなたを助けるためにここに来ます-それらは何も指さないことを許可します-この場合nullptr、何もとして使用されません。

于 2013-07-08T20:08:35.927 に答える