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 一个左值并且您的语法将是正确。
我创建了一个 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 一个左值并且您的语法将是正确。