Требуется значение lvalue

что означает сообщение об ошибке "Lvalue required"?

Ответ 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;