ошибка "l-value required" - PullRequest
       24

ошибка "l-value required"

1 голос
/ 30 августа 2009

Когда мы получаем ошибку «l-value required» ... при компиляции программы на C ++ ??? (я использую VC ++)

Ответы [ 10 ]

11 голосов
/ 30 августа 2009

«lvalue» - это значение, которое может быть целью назначения. «Л» означает «левый», как в левой части знака равенства. Значение r - это правое значение, которое создает значение и не может быть присвоено напрямую. Если вы получаете «lvalue required», у вас есть выражение, которое выдает rvalue, когда требуется lvalue.

Например, константа является r-значением, но не l-значением. Итак:

1 = 2;  // Not well formed, assigning to an rvalue
int i; (i + 1) = 2;  // Not well formed, assigning to an rvalue.

не работает, но:

int i;
i = 2;

ли. Обратите внимание, что вы можете вернуть lvalue из функции; например, вы можете вернуть ссылку на объект, который предоставляет operator = ().

Как отметил Павел Минаев в комментариях, это не формальное определение lvalues ​​и rvalues ​​в языке, а попытка дать описание кому-то, кто запутался в ошибке при использовании rvalue, где требуется lvalue. C ++ - это язык с множеством деталей; если вы хотите получить официальную форму, вам следует обратиться к официальной справке.

2 голосов
/ 01 сентября 2009

Обычно один не привыкший к C ++ может кодировать

if ((x+1)=72) ...

вместо

if ((x+1)==72) ...

первое означает присвоить 72 x + 1 (явно недействительным), в отличие от проверки на равенство между 72 и (x + 1)

2 голосов
/ 30 августа 2009

Это происходит, когда вы пытаетесь назначить что-то (например, результат скалярной функции), которое вы не можете назначить.

1 голос
/ 20 декабря 2018

возьмите для примера

* int a = 10, b = 20;

int c = ++ (a b + 1); Приведенный выше код выдаст ошибку, потому что внутри скобки есть выражение, для которого вы хотите выполнить операцию приращения, которая невозможна. Поэтому, прежде чем делать это, вы должны сохранить это значение в некоторой переменной. Поэтому приведенный выше код потребует ошибку « lvalue ».

1 голос
/ 30 августа 2009

Вы пытаетесь использовать недопустимое значение для l-значения где-то в вашем коде. Значение l - это выражение, которому можно присвоить значение.

Например, вы можете иметь следующее утверждение:

10 = x;

где вместо этого должно быть:

x = 10;

Хотя это, вероятно, не так очевидно в вашем случае.

0 голосов
/ 28 декабря 2018

Это происходит, когда вы пытаетесь манипулировать значением константы, может быть это увеличение или уменьшение, что недопустимо. `

#define MAX 10
void main(){
int num;
num  = ++MAX;
cout<<num;
}
0 голосов
/ 08 октября 2014

У меня была похожая проблема, и я обнаружил, что проблема заключалась в том, что я использовал один '=' вместо двойного '==' в операторе if

Ошибка lvalue:

 if (n = 100) { code } // this is incorrect and comes back with the lvalue error

правильно:

if (n == 100) { code } // this resolved my issue
0 голосов
/ 12 августа 2014

Мы присваиваем значение переменной. Если мы попытаемся сделать обратное, произойдут ошибки с L-значением.

int x,y,z;
x=1;
y=2;
z=x+y; //Correct
x+y=z; //L-value required
0 голосов
/ 01 сентября 2009

R Значение - это выражение, которое всегда отображается справа от оператора присваивания. Например:

int a = 5; // здесь 5 - Rvalue

L Значение - это выражение, которое может находиться слева или справа от присвоения. Когда оно находится слева, оно относится к месту, которое может содержать значение.

Здесь a в выражении a = 5 - это L Значение

и при появлении справа значение читается из значения L. Поскольку значение R, которое не имеет возможности найти какую-либо память, оно не может содержать никаких значений, например LValue, поэтому

5 = 6 или 5 = a

будет ошибкой компилятора.

0 голосов
/ 30 августа 2009

Попробуйте скомпилировать:

5 = 3;

и вы получите error: lvalue required as left operand of assignment

...