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 回答
0

在 MS 环境中,DWORD 是 32 位无符号整数,而 BYTE 是无符号字符。

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

pdx 产生 BYTE,因为 pdx 是 BYTE ,所以你预先增加了,结果是一个 BYTE 现在你与 n 比较,它是 DWORD 结果表达式将是 DWORD,因为 DWORD 比 BYTE 宽,但应该可以工作。有什么问题?

于 2014-04-10T07:10:15.060 回答