ошибка “требуется значение l”
Вопрос
Когда мы получаем ошибку "требуется значение 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;
}