アプリ版:「スタンプのみでお礼する」機能のリリースについて

HRESULT hr;
if( FAILED( hr = CMyD3DApplication::FrameMove(fElapsedTime))) return hr;

D3DXMATRIX matWorld;
D3DXMATRIX matRotY;
D3DXMATRIX matRotX;

m_DInput.JoyUpdate();
if(m_DInput.UP()) matRotX += fElapsedTime * 0.5f;

D3DXMatrixRotationX( &matRotX, m_fWorldRotX );
D3DXMatrixRotationY( &matRotY, m_fWorldRotY );

D3DXMatrixMultiply( &matWorld, &matRotX, &matRotY );
m_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );

リファレンスを参考に3Dを動かすコードを打ちましが、
最後次のエラーがなかなか取れません。
構文もミスはないし、あちこちを調べましたが原因が分かりません。
どうか対処方法をおしえてください。

問題のコンパイルエラー

error C2679: 二項演算子 '+=' : 型 'float' の右オペランドを扱う演算子が見つかりません (または変換できません)。

A 回答 (1件)

まず、VCのエラーコードは「C2679」をMSDNで検索すると説明が出ます。


マニュアルは読んでください。

で、読んで説明のとおり。

> matRotX += fElapsedTime * 0.5f;
'+=' 演算子の右側が 'float' 型じゃだめだよ、と怒られてます。
数学の式を書いてるわけでなし、人間に意味が通っても、型がちゃんと合わないとコンパイラは怒ります。

matRotXの型であるD3DXMATRIXをよく調べてください。
DirectXのマニュアルは手元にありますね?どんな演算子がありますか?
operator +=(float)という関数はありませんね。
そしてfloatに暗黙で変換できるD3DXMATRIXのコンストラクタもありませんね?

[修正方法]以下のどちらか(お好みで。
● +=を使いたいなら、operator += 関数の引数に合う変数を使う。
● そこにこだわらないならfloatを受け入れる別の演算子を使う。
    • good
    • 0
この回答へのお礼

いつもご丁寧にありがとうございます。
両方のオペランドを同じ型(float型に変更)に変更したら解決しました。
くだらない質問を出すなと思うかもしれませんが、
私質問の仕方やすぐパニクル性格で、周りにCを知る人がリアルではいません。
今後Cの勉強は精一杯しますが、いざのときはまた助けてくださるととても安心します。
また、なにとぞよろしくおねがします。

お礼日時:2006/08/10 22:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!