2009-08-30 15 views
1

いつC++プログラムをコンパイルするときに "l-value required"エラーが発生するか(VC++を使用しています)"l-value required"エラー

+8

コードスニペットを投稿してください。 –

+3

少なくともコピー・ペースト・ビルド・エラー・メッセージで質問を拡張する必要があります。なぜなら、人々はしばしばそれらを直接検索エンジンに供給するからです。 – sharkin

答えて

11

アン「左辺値」を取得するには、割り当ての対象となり得る値です。 "l"は等号の左側にある "left"を表します。右辺値は右辺値であり、値を生成し、直接割り当てることはできません。 "左辺値が必要"になっている場合、左辺値が必要なときに右辺値を生成する式があります。

たとえば、定数は右辺値ですが左辺値ではありません。だから、:

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++は多くの詳細を持つ言語です。あなたがフォーマルになるためには、正式なリファレンスを参照する必要があります。

+1

"l"は、l-値が格納位置ロケータ値を定義するので、 "locator"の略です。 – sharkin

+0

さらに悪いのは '= 10;です。 –

+3

この定義は完全に正しいわけではありません。たとえば、 'std :: string'のインスタンスを返す関数は、一時的な値を返します。これは右辺値です。しかし、rvalueは 'operator ='を持ち、したがって '='の左側に現れることがありますが、rvalueとして非const参照にバインドされません。一方、 'const std :: string'変数は左辺です。constに代入することはできませんが(constであるため)、左辺値です。 –

2

これは、あなたが割り当てることができないもの(スカラー関数の結果のようなもの)に変換します。

1

コードのどこかでI値に無効な値を使用しようとしています。 l値は、値を割り当てることができる式です。

10 = x; 

あなたの代わりに持っている必要があります:

x = 10; 

をそれはおそらくあなたのケースでは、この明白ではありませんが

はたとえば、次のようなステートメントを持っているかもしれません。

+0

必ずしも "メモリの場所"である必要はありません。 – strager

+0

@strager:左辺値はオブジェクトを参照します。オブジェクトは格納領域です。 – sellibitze

0

コンパイルしよう:

5 = 3; 

を、あなたがerror: lvalue required as left operand of assignment

2

典型的には、1つのC++に不慣れが第一の手段72を割り当てる

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

の代わりに

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

をコードかもしれないからx + 1(明らかに無効)72との間の等価性のテストとは対照的に、そして(x + 1)

0

R値は代入演算子の右側に常に表示される式です 例:

L値は、割り当ての左側または右側のいずれかに表示される式です。左側にある場合は、値を保持できる場所を示します。

Here a in expression a = 5 is L Value

となり、右側の値に表示される場合はL値から読み取られます。それはそう

5 = 6 or 5 = a

は、コンパイルエラーになります左辺値などの任意の値を保持することはできません任意のメモリを検索する機能を持っていないR値以来 。

0

変数に値を割り当てます。逆のことをしようとすると、L値のエラーが発生します。

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

私は同様の問題があったと私は問題がif文

左辺値の誤差にシングル '=' の代わりに '==' 二重のIを使用していることが分かっ:

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

正しい:

if (n == 100) { code } // this resolved my issue 
関連する問題