簡體   English   中英

C ++錯誤:左值要求為一元'&'操作數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM