Вопрос

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

Это было полезно?

Решение

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

Например, константа — это rvalue, но не lvalue.Так:

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 из функции;например, вы можете вернуть ссылку на объект, который предоставляет оператор =().

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

Другие советы

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

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

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

на месте

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

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

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

Например, у вас может быть такое утверждение:

10 = x;

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

x = 10;

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

возьмем, к примеру

*int a=10,b=20;

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

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

5 = 3;

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

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

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

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

Здесь a в выражении a = 5 является ли L Значением

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

5 = 6 или 5 = а

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

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

int x,y,z;
x=1;
y=2;
z=x+y; //Correct
x+y=z; //L-value required

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

ошибка lvalue:

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

правильный:

if (n == 100) { code } // this resolved my issue

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

#define MAX 10
void main(){
int num;
num  = ++MAX;
cout<<num;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top