以下は、要素をバイナリ検索ツリーに挿入するためのコードです。挿入関数には、ツリーに挿入する数値とツリーのルートであるルートという2つのパラメータがあります。タイプBinaryNode *の非const参照の無効な初期化&
マイroot->getLeft()
とroot->getRight()
の両方が、私はそのこのエラーを返すと思ってい理由である、BinaryNode*
を返す:
BST.cpp: In function ‘void insert(int, BinaryNode*&)’:
BST.cpp:72:34: error: invalid initialization of non-const reference of type ‘BinaryNode*&’ from an rvalue of type ‘BinaryNode*’
void insert(int value, BinaryNode*& root) {
cout << "Looping" << endl;
if(root == NULL) {
BinaryNode* node = new BinaryNode(value);
root = node;
cout << "finalized" << endl;
cout << "Root value: " << root->getValue() << endl;
}
else if(value < root->getValue()) {
insert(value, root->getLeft());
cout << "went to left" << endl;
}
else if(value >= root->getValue()) {
insert(value, root->getRight());
cout << "went to right" << endl;
}
}
正しい値(* &)ように、どのように私はroot->getLeft()
を修正するだろうが、渡されましたか?
また、正確には* &とは何ですか?私はBinaryNode*
のルートを渡すだけでテストしており、rootへの変更は決して有効ではないようです。 rootはinsert以外の値を忘れてしまい、過去には* &のみが元の実際の値を変更するように働いていたようです。
ありがとうございます!
「さらに、*とは何か?」これはポインタへの参照です。それがあなたにとって理にかなっていない場合は、[C++の良い本を解読する](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)と最初のいくつかの章。 – user4581301
'root-> getLeft()'と 'root-> getRight()'は 'BinaryNode *'を返します。これは他のポインタのコピーです。コピーを更新すると、元のポインタは変更されません。コンパイラは、一時的な(値)を非const参照にバインドすることはできないことに言及することによって、あなたに伝えようとします。 –