C++ Error: lvalue required as unary '&' operand

C++ Error: lvalue required as unary '&' operand

我创建了一个 class 命名节点。定义如下:

class node
{
    private:
        int key;
        node * next;

    public:
        void setkey(int key);
        void setnext(node * next);
        int getkey();
        node * getnext();
};

这些函数是基本的 getter 和 setter 函数。 现在,如果我尝试这样做:

MoveNode(&(bTail->getnext()),&start);

它显示错误为 :lvalue required as unary '&' operand

现在,如果我更新 class 节点并将 (node * next) 保留为 public 并通过此访问:

MoveNode(&(bTail->next),&start);

没有显示错误。

请帮助我如何消除错误。

当你从getnext()returnnode*时,你创建了一个node*类型的临时变量,所以用[=获取它的地址是没有意义的14=],这个临时变量反正很快就会被销毁

当你直接访问next时,你引用了一个长期存在的变量,你可以获取它的地址。

您可能想要 return 参考node* 来自 getnext():

node*& getnext() {return next;};

这样它会指向同一个变量next,你就可以获取它的地址。

MoveNode(&(bTail->getnext()),&start);

这不起作用,因为您正在尝试获取由 getnext 编辑的临时指针的地址 return。指针可以是临时的这一事实一开始听起来可能很奇怪,但实际上您并没有得到指向节点存储其 next 指针的位置的指针,而是指向一些无意义的内存位置。

如果您真的想要 &(bTail->getnext()) 到 return 该节点内 next 的地址,请使 getnext return 成为该指针的引用:

node *& getnext();
MoveNode(&(bTail->getnext()),&start);

it shows error as :lvalue required as unary '&' operand

当然可以。 getnext returns 是一个临时值(指针的副本),临时值是右值。右值没有关联的内存地址,因此您不能将它们用作 &.

的操作数
MoveNode(&(bTail->next),&start);

It shows no error.

嗯,bTail->next 一个左值,所以那里没有语法错误。

如果您需要向 MoveNode 传递一个指向指针的指针,那么指向指针的指针必须存储在某处。由于它作为成员存储在 node 中,您可以 return 引用而不是指针的副本,在这种情况下您将 returning 一个左值并且您的语法将是正确。