2012-01-06 40 views
6

私はthis tutorialを使用していますが、私はそれからコードコンパイルする場合:警告 "左辺値として使用されるrvalue"を回避するには?

D3DXMatrixLookAtLH(
    &matView, 
    &D3DXVECTOR3(0.0f, 10.0f, 0.0f), // warning C4238 
    &D3DXVECTOR3(0.0f, 0.0f, 0.0f), // warning C4238 
    &D3DXVECTOR3(0.0f, 0.0f, 1.0f) // warning C4238 
); 

を私が取得:

警告C4238を:非標準の拡張機能を使用:左辺値

として使用するクラスの右辺値を

追加のコード行なしでこれを行う適切な(警告なしの)方法は何ですか?

また、私はそのコード行について何が悪いのでしょうか?それがうまくいくのであれば、警告を出すのはなぜですか?それとも...?

+1

事実、あなたは一時的な(rvalue)のアドレスを取ることはできません。 'operator&' *は左辺値が必要です。警告は、それを正しく示しています。しかし、実用的に言えば、仮引数は完全な式(関数呼び出し)の終わりまで生き続けるので、コードは問題ありません。 – Xeo

+2

コードは移植性がないため、警告が表示されます。あなたのコンパイラには、それを可能にする非標準拡張があります。他のコンパイラはそれを拒否するかもしれません。 –

+0

それは悪いことに、次回は 'matView'を偶然にも一時的にするでしょう。 – lapk

答えて

15

一時的なアドレスを取得しています。あなたはそれをすることはできません。あらかじめごベクトルを宣言:私はあなたを無視

D3DXVECTOR3 a(0.0f, 10.0f, 0.0f) 
      ,b(0.0f, 0.0f, 0.0f) 
      ,c(0.0f, 0.0f, 1.0f); 
D3DXMatrixLookAtLH(&matView, &a, &b, &c); 

注意「を追加のコード行なしの?」なぜなら、それは愚かな要求だからです。

+5

特に、改行を削除するだけでその問題を回避できるからです! – Joshua

+3

正しいコード/ gを書くより重要ではない/愚かな要求/要求 –

+3

お願いこの回答の両方の部分を個別に+1することができます。 –

関連する問題