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

时间:2018-08-01 23:07:56

标签: c++ compiler-errors pass-by-reference lvalue

说我的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):对`addActivities(activity *,int&,int&)'的未定义引用 collect2:错误:ld返回1退出状态

1 个答案:

答案 0 :(得分:0)

从函数内的&前面删除var

function (int &var)
{
    //Body
    var += 1;
}

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

另一种措辞方式:使用&作为参数(就像对function(int &var)所做的那样)意味着您实际上是在传递var本身,而不是值。因此,当您在函数内部递增var时,就不再需要对其进行引用,因为内部var与传递到var中的function()(从例如在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
}