没有从DWORD转换为const char *

时间:2014-04-10 06:56:18

标签: c++ const dword

正如标题所说,当我尝试编译我的程序时,我收到一个调试错误,上面写着:

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

我该如何解决这个问题?

2 个答案:

答案 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宽,但应该可以工作。 问题是什么?