2014-01-03 5 views
0

Я пытаюсь передать по ссылке значение другому указателю, однако я получаю ошибку: lvalue требуется как унарный '&' операнд.lvalue требуется как unary '&' ошибка операнда в C++

Ниже приведены мои попытки:

Node<Item,Key> *root; 

Node<Item, Key> *x= root; 

x= &x->getLeft(); // it does not let me use & 

Ниже приведен мой добытчик для getLeft():

template<typename Item, typename Key> 
Node<Item, Key>* Node<Item, Key>::getLeft() { 

    return left; 
} 

Я признателен, если кто-то может определить свою ошибку. Спасибо заранее.

+4

Ошибка достаточно проста, чтобы определить, но что озадачивает * почему * вы допустили ошибку. Так что, пожалуйста, скажите, что вы думаете о '&'? –

+0

Я согласен с @KerrekSB: пожалуйста, скажите почему. –

ответ

4

Вы имеете в виду:

x = x->getLeft(); 

Возвращаемое значение getLeft() уже указатель.

+0

Затем следует изменить оператор возврата моего геттера, чтобы иметь возможность использовать: x = & x-> getLeft(); ? – user3136756

+0

@ user3136756: * why * вы хотите '&' там? –

+0

@ user3136756: Нет, пожалуйста, прекратите гадать. Просто сделайте это одно изменение, и все будет хорошо. –

0

x->getLeft() возвращает Node<Item, Key>* - это уже указатель. Если вы берете его адрес, вы получите Node<Item, Key>**, который не может быть присвоен x.

У вас появляется другая проблема. Указатель root неинициализирован. Затем вы копируете его до x и пытаетесь получить доступ к члену по косвенности (->). Вам нужно будет сделать root и x указать на что-то прежде, чем вы это сделаете.

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