C ++プログラムのコンパイル中に「l-valuerequired」エラーが発生するのはいつですか?(VC ++を使用しています)
11 に答える
「左辺値」は、割り当てのターゲットになり得る値です。「l」は、等号の左側にあるように、「左」を表します。右辺値は右側の値であり、値を生成するため、直接割り当てることはできません。「左辺値が必要」を取得している場合は、左辺値が必要なときに右辺値を生成する式があります。
たとえば、定数は右辺値ですが、左辺値ではありません。それで:
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;
します。関数から左辺値を返すことができることに注意してください。たとえば、operator =()を提供するオブジェクトへの参照を返すことができます。
Pavel Minaevがコメントで指摘しているように、これは言語の左辺値と右辺値の正式な定義ではありませんが、左辺値が必要な場所で右辺値を使用することに関するエラーについて混乱している人に説明を与えようとします。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 = ++(a b + 1); 上記のコードではエラーが発生します。これは、角かっこ内に、インクリメント操作を実行する式ontがあり、これは不可能であるためです。したがって、それを行う前に、その値をいくつかの変数に格納する必要があります。したがって、上記のコードでは、「左辺値」のエラーが必要になります。
コンパイルしてみてください:
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=a
コンパイラエラーになります。
変数に値を割り当てます。逆のことをしようとすると、L値エラーが発生します。
int x,y,z;
x=1;
y=2;
z=x+y; //Correct
x+y=z; //L-value required
同様の問題が発生しましたが、問題は、ifステートメントで二重の「==」ではなく単一の「=」を使用したことであることがわかりました。
左辺値エラー:
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;
}
実際、このエラーは、「;」を付けないと非常に頻繁に発生します。そして、おそらくこのエラーを与える変数の前にあった変数を宣言しないでください。宣言しないと、宣言されていない変数に値を割り当てることができないため、このエラーがスローされます...スマートボーイ!