左值需要作为赋值的左操作数(递增引用的变量)C++

Posted

技术标签:

【中文标题】左值需要作为赋值的左操作数(递增引用的变量)C++【英文标题】:lvalue required as left operand of assignment (incrementing a referenced variable) C++ 【发布时间】:2018-08-01 23:07:55 【问题描述】:

假设我在 main 中有一个变量,我们称之为 var。 我有一个函数,我希望能够在其中增加 var。

function (int &var)

    //Body
    &var += 1;

我得到错误:

需要左值作为赋值的左操作数。 我该如何解决这个问题?

编辑:

//In header file:
void addActivities(struct activity activityEntry[], int &activityIndex, int 
&activityList);

//In Main:
struct activity activityEntry[LIST_SIZE];
int activityIndex = 0;
int activityList = 0;
//unrelated code...
case 1: addActivities(&activityEntry[activityIndex], activityIndex, 
activityList);

//In actual function:
void addActivities(struct activity activityEntry[], int *activityIndex, int 
&activityList)

    //unrelated code...
    activityList += 1;

然后报错:

Program3Main.cpp:(.text+0x12b): undefined reference to `addActivities(activity*, int&, int&)' collect2:错误:ld 返回 1 个退出状态

【问题讨论】:

只需使用var += 1; 我想知道我是否应该投票关闭打字错误。 当我删除 & 时,它告诉我对函数(var)的未定义引用 如果没有minimal reproducible example,很难提出建议。 看起来addActivities() 的函数定义需要三个参数:一个结构数组、一个指向 int 的指针,然后是一个 int(作为引用)。您似乎正在向它传递一个结构数组、一个 int 和另一个 int。这是假设错误是由您直接在//unrelated code... 下方的调用引起的。 当我在参数中将引用的 int 更改为 int& 时,它告诉我:从 int* 到 int 的无效转换。应该更改它的哪个部分以使其匹配? (对于引用的 int?) 【参考方案1】:

从您的函数中的var 前面删除&

function (int &var)

    //Body
    var += 1;

函数内的& 充当地址运算符,这意味着您实际上是在递增var地址,而不是它指向的值。

另一种表述方式:使用& 作为参数(就像您使用function(int &var) 所做的那样)意味着您实际上是在传递var 本身,而不是它的值。因此,当您在函数内部增加var 时,您不再需要对它的引用,因为内部函数var 与传递给function()var 相同(例如,来自main()) .

不要忘记函数的返回类型。您还可以使用递增运算符递增 var,如下所示:

#include <iostream>

void increment(int &var)

    var++;


int main() 
  int num = 0;
  increment(num);
  increment(num);
  std::cout << num << std::endl; // prints 2

【讨论】:

没有返回类型,因为它不是一个真正的函数,为了简单起见,我只是这样做了。当我拿走 & 时,它告诉我对这个变量的未定义引用...... @HannahLouise 我想。只是确保。 @HannahLouise 你能发布给你这个错误的完整例子吗? 整件事情很可怕,但我试图发布相关的部分

以上是关于左值需要作为赋值的左操作数(递增引用的变量)C++的主要内容,如果未能解决你的问题,请参考以下文章

左值需要作为 c 中赋值错误的左操作数

c++中的左值和右值,右值引用到底是啥?关于引用这一节看得很迷糊。

左值需要作为赋值的左操作数

错误:需要左值作为赋值的左操作数,我收到此错误啥是左值和右值以及如何删除此错误

C ++ - 左值需要作为赋值的左操作数[重复]

条件运算符中的“错误:需要左值作为赋值的左操作数”