Нет преобразования из DWORD в const char *

Как видно из названия, когда я пытаюсь скомпилировать свою программу, я получаю ошибку отладки, которая говорит:

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;
};

Как я могу решить это?

0

Решение

Существует простое решение, вы должны преобразовать тип BYTE в DWORD или наоборот:

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

Но это приводит меня к вопросу о том, что вы делаете. DWORD — это гораздо большее хранилище, чем тип указателя BYTE, к которому обращается указатель — поэтому это сравнение выглядит опасно, как место, где может возникнуть незначительная ошибка переполнения, когда n> 255.

Кроме того, вам кажется, что уловка оператора ++ кажется сбивающей с толку — ясно ли, что этот оператор НЕ увеличивает указатель на следующий байт, а скорее увеличивает значение байта, на который в данный момент указывает указатель?

2

Другие решения

В среде MS DWORD — это 32-разрядное целое число без знака, а BYTE — беззнаковый символ.

 if (++(*pIdx) >= n) // error line

pdx делает BYTE, так как pdx — BYTE
вы считаете, что результатом является БАЙТ
сейчас сравниваешь что такое DWORD
Результирующее выражение будет DWORD, так как DWORD шире, чем BYTE, но должно работать.
В чем проблема?

0

По вопросам рекламы [email protected]