朋友功能“赋值中的非左值”

时间:2014-01-10 21:43:12

标签: c++

我的程序没有编译并且一直输出相同的错误“赋值中的非左值”。我试过环顾互联网为什么会这样,但我似乎找不到任何东西。我真的很感激一些意见。

#include <iostream>
using namespace std;

class Class
{
      public:
              Class()
              {
                    Var=0; 
              }
      private:
              int Var;

      friend void Friend(Class &object);  

};

void Friend(Class &object)
{
     &object.Var=99;
     cout << &object.Var << endl;
}

int main()
{
    Class testobject;
    Friend(testobject);
}

4 个答案:

答案 0 :(得分:2)

你不需要函数内的&

答案 1 :(得分:2)

问题在于这一行&object.Var=99;您使用object的地址而不是访问.Var,这无效。

似乎你误解了引用,你不必去引用它们(与指针不同)。

将您的功能更改为:

void Friend(Class &object)
{
    object.Var=99;
    cout << object.Var << endl;
}

答案 2 :(得分:2)

将功能定义更改为

void Friend(Class &object)
{
     object.Var=99;
     cout << object.Var << endl;
}

错误的原因在以下C ++标准引用中描述

  

如果表达式的类型为T,则结果具有“指向T的指针”   并且是 prvalue

答案 3 :(得分:0)

&object.Var=99;替换为object.Var=99;,将cout << &object.Var << endl;替换为cout << object.Var << endl;

传递参数时,&表示您收到变量作为参考。

void Friend(Class &object)表示您在testobject中获得object的引用。

&object.Var表示object.Var的地址。你不能分配给那个。因此错误non-lvalue in assignment