C++でD3DXMatrixLookAtRH関数を使用しているときに、「’&’に左辺値がありません」というエラーが発生することがあります。このエラーは、引数の渡し方が正しくないために発生します。本記事では、このエラーを解決するための方法について詳しく説明します。
エラーの原因とその解決方法
エラーメッセージ「’&’に左辺値がありません」は、引数に参照(&)を渡そうとしている場所で、左辺値が必要なのに右辺値(または一時オブジェクト)が渡されている場合に発生します。
D3DXMatrixLookAtRH関数は、カメラのビュー行列を作成するための関数で、引数としてD3DXVECTOR3型の参照を必要とします。そのため、`D3DXVECTOR3(0, 0, 0)`のような一時オブジェクトをそのまま渡すとエラーが発生します。
正しい引数の書き方
一時オブジェクトを渡すのではなく、変数を使って参照を渡す必要があります。次のように修正することでエラーを回避できます。
D3DXMATRIX viewMat;
D3DXVECTOR3 viewFrom(0, (float)i, (float)j);
D3DXVECTOR3 target(0, 0, 0);
D3DXVECTOR3 up(0, 1, 0);
D3DXMatrixLookAtRH(&viewMat, &viewFrom, &target, &up);
ここでは、`D3DXVECTOR3`型の変数`target`と`up`を用意し、それらを参照渡ししています。これにより、関数が正しく参照を受け取ることができ、エラーを回避できます。
関数の引数について理解を深める
D3DXMatrixLookAtRH関数は、3つのD3DXVECTOR3型の引数を取ります。それぞれの意味は以下の通りです。
- viewMat: 出力されるビュー行列。
- viewFrom: カメラの位置。
- target: カメラが向かうターゲットの位置。
- up: カメラの上方向を示すベクトル。
これらの引数は全て参照渡しが必要で、一時オブジェクトをそのまま渡すことはできません。事前に変数として定義しておくことが重要です。
まとめ
「’&’に左辺値がありません」というエラーは、D3DXMatrixLookAtRH関数の引数に一時オブジェクトを渡したことによるものです。エラーを回避するためには、引数に渡す前に変数を定義し、それらを参照渡しする必要があります。正しい引数の渡し方を理解することで、このエラーを解決できるでしょう。
コメント