Я пытаюсь создать рекурсивную функцию вставки для моего дерева двоичного поиска. Однако я продолжаю получать следующую ошибку: «Невозможно принять адрес rvalue типа Node *». Я понимаю, что если мой указатель имеет значение NULL, то, принимая его адрес, он даст мне эту ошибку, но как бы я решил смягчить эту проблему?Не удается получить адрес ошибки rvalue в рекурсивной функции для двоичного дерева
Примечание: Конструктор узла (data * _data) устанавливает указатель слева и справа в NULL, когда объект создан.
Вот мой код, я прокомментировал две строки, которые производят ошибку rvalue. Я также использую 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;
}
ваш код не компилируется (в связи с неуплатой - вопросы, связанные с вопросами), и вы не говорите, что такое ошибка, поэтому ее очень сложно помочь. https://godbolt.org/g/RZFQXK – xaxxon
«Ошибка rvalue» не очень описательна. – xaxxon
Код - это просто упрощенная версия моей программы. Я отредактировал выше, который теперь точно указывает ошибку. – purpleScrn