1

タイトルが示すように、プログラムをコンパイルしようとすると、次のようなデバッグ エラーが表示されます。

エラー 7 エラー C2446: '>=': 'DWORD' から 'const char *' への変換がありません

いくつかのコード:

virtual CBaseDecorator* __Clone(CParticleInstance* pfi, CParticleInstance* pi) 
{ 
    return new CTextureAnimationCWDecorator(
               fFrameTime,n,(BYTE*)((unsigned char*)pi+((BYTE*)pIdx-(BYTE*)pfi))); 
}
virtual void __Excute(const CDecoratorData & d)
{
    fLastFrameTime -= d.fElapsedTime;
    while (fLastFrameTime<0.0f)
    {
         fLastFrameTime += fFrameTime;
          if (++(*pIdx) >= n) // error line
              *pIdx = 0;
    }
}
DWORD n;
float fLastFrameTime;
float fFrameTime;
BYTE* pIdx;
};

どうすればこれを解決できますか?

4

2 に答える 2

2

BYTE タイプを DWORD またはその逆にキャストする必要がある簡単な解決策があります。

if (++(*pIdx) >= (BYTE)n) // error corrected

しかし、これはあなたが何をしているのか疑問に思います。DWORD は、ポインターがアドレス指定する BYTE 型よりもはるかに大きなストレージです。したがって、この比較は、n > 255 の場合に微妙なオーバーフロー バグが発生する可能性がある場所のように危険に見えます。

また、++ 演算子の策略は紛らわしいようです。この演算子がポインターを次のバイトにインクリメントするのではなく、現在指しているバイトの値をインクリメントしていることは明らかですか?

于 2014-04-10T07:02:14.440 に答える