バイナリ検索ツリーの再帰的な挿入関数を作成しようとしています。しかし、私は次のエラーを取得し続ける "Nodeの*の値のアドレスを取ることができません"。ポインタがNULLの場合、そのアドレスを取ると私にこのエラーが出るはずですが、この問題を緩和するにはどうしたらいいですか?バイナリツリーの再帰関数でrvalueエラーのアドレスを取得できません。
注:Node(data * _data)コンストラクタは、オブジェクトの作成時に左と右のポインタをNULLに設定します。
ここに私のコードですが、私はrvalueエラーを生成している2つの行をコメントしました。私はXcodeも使用しています。
ありがとうございます。
class Node {
private:
data* data;
Node* left;
Node* right;
public:
Node(data* _data);
~Node();
Node* getLeft(); // gets the left immediate descendent of the Node.
Node* getRight(); // gets the right immediate descendent of the Node
data* getVal(); //returns pointer to data
};
class Tree {
private:
Node* root;
int nodeCount;
Node* placeNode(Node** root, data* data);
public:
Tree();
~Tree();
bool placeIn(data* newData); //placeIns node into ordered BST
};
bool Tree::placeIn(data* newData) {
return placeNode(root, newData); //placeIns newData object into BST
}
Node* Tree::placeNode(Node** root, data* data) {
//placeIns node into BST via in order traversal
if ((*root) == NULL) {
return (*root) = new Node(data);
}
if ((*root)->getVal()->getName() == data->getName()) {
cout << "Node exists" << endl;
return NULL;
}
if ((*root)->getVal()->getName() > data->getName()) {
placeNode(&(*root)->getLeft(), data); //Cannot take the address of an rvalue of type Node*
}
else {
placeNode(&(*root)->getRight(), data); //Cannot take the address of an rvalue of type Node*
}
return NULL;
}
あるので
return root = new Node(data)
は、コンパイルされません質問関連の問題)、エラーが何であるかは言わないので、助けが非常に難しいです。 https://godbolt.org/g/RZFQXK – xaxxon"rvalue error"はあまり説明的ではありません。 – xaxxon
コードは私のプログラムの単純化されたバージョンです。私は上記を編集してエラーを正確に述べています。 – purpleScrn