2014-12-09 4 views
-1

Предположим, что у меня есть структура данных двоичного дерева с несимметричным дном. После инициализации() У меня есть переменная 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; 
} 

ответ

1
insertNode((Node **)&(tree.getRoot())); 

Это потому, что вы не можете использовать возвращаемые значения функции возвращения встроенных типов по значению как л-значение.

+0

Не могли бы вы объяснить это более подробно? – Rob

+0

Итак, скажем, функция возвращает int. "int func();". Использование его как l-значение «func() = 4» не имеет смысла, поскольку вы просто пытаетесь изменить временно возвращенное. – ravi

+0

Думаю, я получу его сейчас :) Это потому, что возвращаемое значение (адрес корня) является его копией? Итак, я бы изменил позже в следующем funtion другое место в памяти? – Rob

Смежные вопросы