Как видно из названия, когда я пытаюсь скомпилировать свою программу, я получаю ошибку отладки, которая говорит:
Error 7 error C2446: '>=' : no conversion from 'DWORD' to '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;
};
Как я могу решить это?
Существует простое решение, вы должны преобразовать тип BYTE в DWORD или наоборот:
if (++(*pIdx) >= (BYTE)n) // error corrected
Но это приводит меня к вопросу о том, что вы делаете. DWORD — это гораздо большее хранилище, чем тип указателя BYTE, к которому обращается указатель — поэтому это сравнение выглядит опасно, как место, где может возникнуть незначительная ошибка переполнения, когда n> 255.
Кроме того, вам кажется, что уловка оператора ++ кажется сбивающей с толку — ясно ли, что этот оператор НЕ увеличивает указатель на следующий байт, а скорее увеличивает значение байта, на который в данный момент указывает указатель?
В среде MS DWORD — это 32-разрядное целое число без знака, а BYTE — беззнаковый символ.
if (++(*pIdx) >= n) // error line
pdx делает BYTE, так как pdx — BYTE
вы считаете, что результатом является БАЙТ
сейчас сравниваешь что такое DWORD
Результирующее выражение будет DWORD, так как DWORD шире, чем BYTE, но должно работать.
В чем проблема?