C++ C++;错误:左值必须为一元'&';操作数
我已经创建了一个名为node的类。其定义如下: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函数。 现在,如果我尝
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);