Domanda

Quando riceviamo l'errore "valore l richiesto"...durante la compilazione del programma C++???(sto usando VC++)

È stato utile?

Soluzione

Un "lvalue" è un valore che può essere l'obiettivo di un'assegnazione.La "l" sta per "sinistra", come nella parte sinistra del segno di uguale.Un rvalue è il valore della mano destra e produce un valore e non può essere assegnato direttamente.Se ottieni "lvalue richiesto" hai un'espressione che produce un rvalue quando è richiesto un lvalue.

Ad esempio, una costante è un rvalue ma non un lvalue.COSÌ:

1 = 2;  // Not well formed, assigning to an rvalue
int i; (i + 1) = 2;  // Not well formed, assigning to an rvalue.

non funziona, ma:

int i;
i = 2;

Fa.Tieni presente che puoi restituire un lvalue da una funzione;ad esempio, puoi restituire un riferimento a un oggetto che fornisce un operator=().

Come sottolineato da Pavel Minaev nei commenti, questa non è una definizione formale di lvalue e rvalue nel linguaggio, ma tenta di fornire una descrizione a qualcuno confuso su un errore nell'utilizzo di un rvalue dove è richiesto un lvalue.Il C++ è un linguaggio con molti dettagli;se vuoi diventare formale dovresti consultare un riferimento formale.

Altri suggerimenti

Questo accade quando si sta cercando di assegnare a qualcosa (come il risultato di una funzione scalare) che non è possibile assegnare a.

In genere uno abituato a C ++ potrebbe codice

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

al posto di

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

i primi mezzi 72 per assegnare x + 1 (chiaramente non valido) rispetto al test per la parità tra 72 e (x + 1)

Si sta tentando di utilizzare un valore non valido per l-value da qualche parte nel codice. Un l-value è un'espressione a cui può essere assegnato un valore.

Per esempio, si potrebbe avere una dichiarazione simile al seguente:

10 = x;

in cui si dovrebbe invece avere:

x = 10;

Anche se non è probabilmente questa evidente nel vostro caso.

prendere ad esempio

* int a = 10, b = 20;

int c = ++ ( b + 1); sopra il codice darà errore perché all'interno della staffa si dispone di un'espressione ont che si vuole fare un'operazione di incremento che non è possibile. Quindi, prima di fare di fare che si deve memorizzare tale valore in una certa variable.so sopra codice di errore " lvalue " necessaria.

Provare a compilare:

5 = 3;

e si ottiene error: lvalue required as left operand of assignment

R Il valore è un'espressione che appaiono sempre sul lato destro di un operatore di assegnamento Ad esempio:

  

int a = 5; // qui 5 è rvalue

L Valore è un'espressione che può sia venire sul lato sinistro o destro di un assignment.When è in sul lato sinistro si riferisce ad un luogo che può contenere un valore.

  

Qui a nell'espressione a = 5 è L   Valore

e quando appare sul lato destro valore viene letto dalla L Valore. Poiché il valore R che non ha possibilità di localizzare qualsiasi memoria non può contenere qualsiasi valore come lValue così

  

5 = 6 o 5 = a

sarà errore del compilatore.

Si assegna valore a una variabile. Se cerchiamo di fare la cosa inversa si verificano poi gli errori di L-valore.

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

Ho avuto un problema simile e ho scoperto che il problema è stato che ho usato un unico '=' invece di una doppia '==' in un'istruzione if

Errore lvalue:

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

corretta:

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

Questo succede quando si tenta di manipolare il valore di una costante può essere incrementi o decrementi, che non è permesso. `

#define MAX 10
void main(){
int num;
num  = ++MAX;
cout<<num;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top