что означает сообщение об ошибке "Lvalue required"?
Требуется значение lvalue
Ответ 1
lvalue - это то, что может появиться в левой части задания, другими словами "что-то, что может быть назначено"
Итак, найдите назначение, где левая сторона не является "назначаемой", например, что-то простое, поскольку это может вызвать такую ошибку.
if (0 = foo)
{
}
Здесь у вас есть попытка назначить константу из-за случайного использования =, а не ==
См. также
Ответ 2
Это означает, что реализация ожидает объект, но вы просто передали значение или функцию. Это происходит для присвоений, которые вы передали не-lvalue или для операций адреса, применяемых к не-функциям.
Lvalue означает "значение местоположения" и означает выражение, которое ссылается на объект, объявленный как register, или на ячейку памяти. Что-то вроде 42 - это значение, которое не соответствует ни критериям. Более формально существует три категории
- Lvalues: обращение к объектам. Сюда входят объявленные объекты const. Такими являются немодифицируемые значения l.
- Обозначения функций: обращение к функциям.
printf- это обозначение функции, но&printfнет, а*&printfснова. - Другие: иногда называются "rvalue" и стандартом, описанным как "значение выражения". Примерами являются
var + 0(дающие значение, не связанное с объектами) или перечислитель перечисления.&printfпринадлежит к этой категории.
Ответ 3
Стандартные состояния C99 (6.3.2.1):
An lvalue - выражение с типом объекта или неполным типом, отличным от void; если lvalue не назначает объект при его оценке, поведение undefined. Когда объект имеет определенный тип, тип определяется lvalue, используемым для обозначения объекта. Модифицируемый lvalue - это lvalue, который не имеет типа массива, не имеет неполного типа, не имеет типа, соответствующего const, и если он является структурой или объединением, не имеет какого-либо члена (включая, рекурсивно, любой член или элемент всех содержащихся агрегатов или союзов) с категориальным типом.
Имя lvalue исходит из выражения присваивания E1 = E2, в котором левый операнд E1 должен быть (изменяемым) lvalue. Это, пожалуй, лучше рассматривать как представление объекта "значение локатора". То, что иногда называют rvalue, в этом Международном стандарте описывается как "значение выражения".
Другими словами, lvalue - это то, что вы можете найти для потенциального изменения. Модифицируемым lvalue является тот, который вы действительно можете изменить.
Например, оператор C:
x = 7;
справедливо, поскольку x является lvalue. С другой стороны, утверждение:
14 = 7;
недействителен, поскольку 14 - это не то, что вы можете найти для назначения.
Отрывок:
const int x = 7;
фактически создает lvalue, называемый x, даже если вам не разрешено его изменять (это не изменяемое значение l).
Ответ 4
ошибка возникает, если вы код somththing как function(parameter) = value;, потому что вы не можете назначить значение для чего-либо, что для него не является возможным контейнером.
Ответ 5
Скорее всего, это означает, что вы пытались присвоить значение тому, что не может быть назначено. Например, обе из следующих причин могут вызвать эту ошибку:
5 = 5; myObject- > myMethod() = 5;