¿qué significa realmente el mensaje de error "Lvalue required"?lvalue required
Respuesta
Un valor izquierdo es algo que puede aparecer en el lado izquierdo de una asignación, en otras palabras 'algo que se puede asignar'
lo tanto, buscar un trabajo donde el lado izquierdo no es 'asignable' por ejemplo, algo tan simple como esto podría desencadenar un error de este tipo
if (0 = foo)
{
}
Aquí tienes un intento de asignar a una constante debido al uso accidental = en vez de ==
Véase también
Significa que la aplicación espera un objeto, sino que acaba de pasar un valor o función. Esto sucede para las asignaciones que pasó a operaciones que no sean de valor l o para la dirección de las aplicadas a las no funciones.
Lvalue significa "valor de ubicación" y significa una expresión que hace referencia a un objeto declarado como register
o a una ubicación de memoria. Algo como 42
es un valor que no coincide con ninguno de los criterios. Más formalmente hay tres categorías
- Lvalues: Refiriéndose a los objetos. Esto incluye objetos declarados const. Tales son lvalues no modificables.
- Designadores de funciones: en referencia a las funciones.
printf
es un designador de función, pero&printf
no lo es, mientras que*&printf
es de nuevo. - Otros: A veces llamado "rvalue" y por el estándar descrito como "el valor de una expresión". Los ejemplos son
var + 0
(produciendo un valor no asociado con objetos más), o un enumerador de una enumeración.&printf
pertenece a esta categoría.
el error viene si codifica somrthing como function(parameter) = value;
porque no puede asignar valor a nada que no sea un contenedor posible para él.
Los C99 estados estándar (6.3.2.1):
Un lvalue
es una expresión con un tipo de objeto o un tipo incompleto distinta de vacío; si un lvalue
no designa un objeto cuando se evalúa, el comportamiento no está definido. Cuando se dice que un objeto tiene un tipo particular, el tipo es especificado por el lvalue
usado para designar el objeto. Un lvalue
modificable es lvalue
que no tiene tipo de matriz, no tiene un tipo incompleto, no tiene un tipo const-qualified, y si es una estructura o unión, no tiene ningún miembro (incluido, recursivamente, cualquier miembro o elemento de todos los agregados o uniones contenidos) con un tipo de const-qualified.
El nombre lvalue
proviene originalmente de la expresión de asignación E1 = E2
, en el que se requiere que el operando de la izquierda E1
ser un (modificable) lvalue
. Quizás se considere mejor como que representa un objeto "valor de ubicación". Lo que a veces se llama rvalue
se encuentra en esta norma internacional descrita como el "valor de una expresión".
En otras palabras, un lvalue
es algo que se puede localizar para potencialmente cambiar. Un lvalue
modificable es aquel en el que en realidad está permitido para cambiar.
Por ejemplo, la declaración C:
x = 7;
es válida porque es un x
lvalue
. Por otra parte, la declaración:
14 = 7;
no es válida porque es 14
no algo que se puede localizar a una asignación.
El fragmento:
const int x = 7;
crea en realidad una llamada lvalue
x
a pesar de que usted no está autorizado a cambiarlo (no es modificable un `valor-I).
nit picking, pero técnicamente esto también puede ser una variable que se declara con 'register', por lo que podría no tener una dirección. –
"_si un lvalue no designa un objeto cuando se evalúa, el comportamiento no está definido._" excepto cuando el comportamiento es _not_ undefined: '& * (int *) 0;' (sic) – curiousguy
Lo más probable es que haya intentado asignar un valor a algo que no se puede asignar. Por ejemplo, ambos de los siguientes probablemente causarían ese error:
5 = 5; myObject-> myMethod() = 5;
- 1. (RValue == lValue)
- 2. lValue a RValue conversiones
- 3. Significado de XMLElement @ required = true
- 4. Rails simple_form atributo required mark (*)
- 5. lvalue requerido como operador de la izquierda de la asignación
- 6. ¿"LValue" no significa lo que creo que significa?
- 7. aria-required en un grupo de radio
- 8. JQuery validation-select required if checkbox checked
- 9. Python argparse required = True but --version function?
- 10. Uso recomendado de Spring @ @Required Anotación
- 11. conversión rvalue a lvalue Visual Studio
- 12. Binding temporal a una referencia lvalue
- 13. ¿Qué idioma acuñó el término lvalue?
- 14. html5: Significado del atributo llamado required in checkbox/radio
- 15. ¿Cómo evitar la advertencia "rvalue used as lvalue"?
- 16. ¿Debo usar calificadores de referencia lvalue para operadores de asignación?
- 17. Lvalue requerido como operando izquierdo de la asignación
- 18. ¿Cuáles son los usos de las subrutinas lvalue en Perl?
- 19. lvalue no designa un objeto después de la evaluación?
- 20. ¿Qué intenta Scala decirme y cómo soluciono esto? [required: java.util.List [? 0] where type? 0]
- 21. validación discreto haciendo caso omiso de los atributos de datos-val, pero trabajar con class = "required"
- 22. ¿Qué significa "<top (required)>" en una pila de Ruby?
- 23. ¿Para qué se usan <required> y <rtexprvalue>?
- 24. Operador sobrecarga <<: no puede vincular lvalue a 'std :: basic_ostream <char> &&'
- 25. La referencia no constante solo puede estar vinculada a un lvalue
- 26. En cuanto a la conversión lvalue-a-rvalue, ¿cuándo se requiere?
- 27. std :: avance vs std :: movimiento, mientras que la unión a lvalue referencia rvalue
- 28. ¿Por qué la sobrevalor r de `operator <<` for `basic_ostream` devuelve una referencia lvalue?
- 29. Validación del lado del servidor de una propiedad de cadena REQUIRED en MVC2 Entity Framework 4 no funciona
- 30. Si el método de protocolo está marcado @required, cuando no está implementado, ¿por qué el compilador emite una advertencia y no un error?
posible duplicado del error ["l-value required"] (http://stackoverflow.com/questions/1353384/l-value-required-error) –
@Paul, eso es sobre C++. –