Моя программа не компилируется и продолжает выводить ту же ошибку «не-значение в присваивании». Я пытался посмотреть в Интернете, почему это происходит, но я не могу ничего найти. Я был бы очень признателен за вклад.
#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);
}
Вам не понадобится &
внутри функции
Проблема в этой линии &object.Var=99;
Вы берете адрес object
и чем доступ .Var
, это не может работать.
Кажется, вы неправильно поняли ссылки, вам не нужно разыменовывать их (в отличие от указателя).
Измените свою функцию на это:
void Friend(Class &object)
{
object.Var=99;
cout << object.Var << endl;
}
Измените определение функции на
void Friend(Class &object)
{
object.Var=99;
cout << object.Var << endl;
}
Причина ошибки описана в следующей цитате стандарта C ++
если тип выражения — T, результат имеет тип «указатель на T»
и является prvalue
замещать &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
,