Я добавлю ссылку на эту очень похожую проблему: C ++ начальное значение ссылки на неконстантное должно быть lvalue Ошибка та же (начальное значение ссылки на неконстантное должно быть lvalue) но обстоятельства разные. В отличие от этого примера, в моей функции указатель ДОЛЖЕН быть изменен. Я пишу рекурсивную функцию для добавления узла в дерево двоичного поиска. Функция включена сюда.
1 void BST::insert(BSTNode*& current, BSTNode*& newNode)
2 {
3 //If empty, assign
4 if (current == nullptr)
5 current = newNode;
6
7 //If less, go left
8 else if (newNode->getEng() <= current->getEng())
9 insert(current->getLeft(), newNode);
10
11 //If greater, go right
12 else
13 insert(current->getRight(), newNode);
14 }
Я получаю сообщение об ошибке в строках 9 и 13. Как показано, я передаю указатели как current, так и newNode по ссылке, но у него нет проблем с newNode, только мои current->getLeft()
и current->getRight()
заявления. В вопросе, на который я ссылался, был сделан комментарий, что ошибка в том, что передача по ссылке должна использоваться только тогда, когда значение будет изменено в функции. В первом случае current == nullptr
значение изменено, поэтому я не уверен, что делать.
Редактирование для включения класса BSTNode
class BSTNode
{
public:
BSTNode();
BSTNode(char, string);
void setLeft(BSTNode* newLeft) { left = newLeft; }
void setRight(BSTNode* newRight) { right = newRight; }
BSTNode* getLeft() { return left; }
BSTNode* getRight() { return right; }
char getEng() { return Eng; }
string getMorse() { return Morse; }
private:
char Eng;
string Morse;
BSTNode* left;
BSTNode* right;
};
И это мой класс BST:
class BST
{
public:
BST(string fileName);
~BST();
bool isEmpty();
void addNode(char english, string morse);
void insert(BSTNode** current, BSTNode*& newNode);
//bool searchTree(char english, string& morse);
private:
BSTNode* root;
int nodeCount;
};