[英]C++ Error: lvalue required as unary '&' operand
我創建了一個名為node的類。 定義如下:
class node
{
private:
int key;
node * next;
public:
void setkey(int key);
void setnext(node * next);
int getkey();
node * getnext();
};
這些功能是基本的獲取和設置功能。 現在,如果我嘗試這樣做:
MoveNode(&(bTail->getnext()),&start);
它顯示錯誤為:lvalue要求為一元'&'操作數
現在,如果我更新Node類並保持(node * next)為公共,並通過以下方式訪問:
MoveNode(&(bTail->next),&start);
它沒有顯示錯誤。
請幫助我如何擺脫錯誤。
當從getnext()
返回node*
,您將創建一個node*
類型的臨時變量,因此使用&
來獲取其地址毫無意義,無論如何該臨時變量將很快被銷毀。
當您直接訪問next
,您指的是一個長期存在的變量,您可以獲取其地址。
您可能要從getnext()
返回對node*
的引用 :
node*& getnext() {return next;};
這樣它next
將指向相同的變量,您將可以獲取其地址。
MoveNode(&(bTail->getnext()),&start);
它顯示錯誤為:lvalue要求為一元'&'操作數
當然可以。 getnext
返回一個臨時值(指針的副本),而臨時變量為右值。 右值沒有關聯的內存地址,因此您不能將它們用作&
的指令。
MoveNode(&(bTail->next),&start);
它沒有顯示錯誤。
好吧, bTail->next
是一個左值,因此那里沒有語法錯誤。
如果需要將指向指針的指針傳遞給MoveNode
,則指向該指針的指針必須存儲在某個位置。 由於它作為成員存儲在node
,因此您可以返回引用而不是指針的副本,在這種情況下,您將返回左值,並且語法正確。
MoveNode(&(bTail->getnext()),&start);
這是行不通的,因為您嘗試獲取getnext
返回的臨時指針的地址。 指針可以是臨時的,一開始聽起來似乎很奇怪,但是從本質上講,您沒有得到指向節點存儲其next
指針的位置的指針,而是指向了一些毫無意義的內存位置。
如果您確實希望&(bTail->getnext())
返回該節點內next
的地址,請使getnext
返回對該指針的引用:
node *& getnext();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.