Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;错误:左值必须为一元'&';操作数_C++_Class_Lvalue - Fatal编程技术网

C++ C++;错误:左值必须为一元'&';操作数

C++ C++;错误:左值必须为一元'&';操作数,c++,class,lvalue,C++,Class,Lvalue,我已经创建了一个名为node的类。其定义如下: class node { private: int key; node * next; public: void setkey(int key); void setnext(node * next); int getkey(); node * getnext(); }; 这些函数是基本的getter和setter函数。 现在,如果我尝

我已经创建了一个名为node的类。其定义如下:

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);
它将错误显示为:需要左值作为一元“&”操作数

现在,如果我更新类节点并将(Node*next)保持为public并通过以下方式访问:

MoveNode(&(bTail->next),&start);
它没有显示错误


请帮助我如何消除错误。

当您从
getnext()
返回
node*
时,您创建了一个
node*
类型的临时变量,因此使用
&
获取其地址没有意义,这个临时变量无论如何很快就会被销毁

当您直接访问
next
时,您引用的是一个长寿命变量,您可以获取它的地址

MoveNode(&(bTail->getnext()),&start);
您可能希望从
getnext()
返回对
节点*
的引用:

这样它将指向同一个变量
next
,您将能够获取它的地址

MoveNode(&(bTail->getnext()),&start);
这不起作用,因为您试图获取由
getnext
返回的临时指针的地址。指针可以是临时的这一事实一开始听起来可能很奇怪,但实际上,您并没有得到指向节点存储其
next
指针的指针,而是指向某个无意义的内存位置

如果您确实希望
&(bTail->getnext())
返回该节点中
next
的地址,请使
getnext
返回对该指针的引用:

node *& getnext();
它将错误显示为:需要左值作为一元“&”操作数

当然有
getnext
返回一个临时值(指针的副本),临时值为右值。R值没有关联的内存地址,因此您不能将它们用作
&
的oprand

MoveNode(&(bTail->next),&start);
它没有显示错误

嗯,
bTail->next
是一个左值,因此没有语法错误


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

您好,Maulik欢迎使用stackoverflow!请考虑代码片段和代码示例之间的差异。谈论C++代码示例一般是你需要的:)你可能想要<代码> MOVENODE(BTRO-> GETNEXT(),和开始),但是我们很难确定没有使用代码< > MOVENODE 值。
MoveNode(&(bTail->next),&start);