正如标题所说,当我尝试编译我的程序时,我收到一个调试错误,上面写着:
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 :(得分:2)
有一个简单的解决方案,您必须将BYTE类型转换为DWORD或相反的方式:
if (++(*pIdx) >= (BYTE)n) // error corrected
但这确实让我质疑你在做什么。 DWORD是指针所针对的BYTE类型的更大存储 - 因此这种比较看起来很危险,就像当n> 1时可能发生细微溢出错误的地方。 255。
另外你认为++运算符似乎令人困惑 - 你清楚这个运算符是不是将指针递增到下一个字节,而是递增当前指向的字节的值?
答案 1 :(得分:0)
在MS环境中,DWORD是32位无符号整数,BYTE是无符号字符。
if (++(*pIdx) >= n) // error line
pdx制作BYTE,因为pdx是BYTE 你预先增加了结果,结果是BYTE 现在你要比较n,即DWORD 结果表达式将是DWORD,因为DWORD比BYTE宽,但应该可以工作。 问题是什么?