Предположим, что у меня есть структура данных двоичного дерева с несимметричным дном. После инициализации() У меня есть переменная Node * корень установлен в NULL
Один из моего метода пытается вставить узел в деревеПолучение адреса указателя из возвращаемого значения функции
bool insertNode(Node ** currentNode, const string & key, int val)
{
Node* newNode;
if (*currentNode == NULL)
{
newNode = newNode(key,val);
*currentNode = newNode;
if(root==NULL) root = newNode;
return true;
}
if (key<*currentNode->getKey())
{
insertNode((Node **)&(*currentNode)->getLeft(), key, val); //error
}
if (key>*currentNode->getKey())
{
insertNode((Node **)&(*currentNode)->getRight(), key, val); //error
}
return false;
}
Node* getRoot() { return root; }
Это называется
insertNode((Node **)&(tree.getRoot())); //error
Unfortunatelly компилятор дает мне ошибки
error: lvalue required as unary ‘&’ operand|
Если я называю FCE insertNode с переменной Node* node
как этот
Node* node = tree.getRoot();
insertNode((Node **)&node); //no error
Это безошибочно.
Не могли бы вы объяснить мне, почему?
EDIT: После ответа ravi я понял, что изменил только копии адресов.
Для ее решения я изменил FCE
Node** getRoot() { return &root; }
также методы члены для узла
Node** getLeft()
{
return &m_left;
}
Node** getRight()
{
return &m_right;
}
Не могли бы вы объяснить это более подробно? – Rob
Итак, скажем, функция возвращает int. "int func();". Использование его как l-значение «func() = 4» не имеет смысла, поскольку вы просто пытаетесь изменить временно возвращенное. – ravi
Думаю, я получу его сейчас :) Это потому, что возвращаемое значение (адрес корня) является его копией? Итак, я бы изменил позже в следующем funtion другое место в памяти? – Rob