2014-04-10 88 views
0

没有转化为题说,当我尝试编译我的程序我收到一个调试错误至极说:从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

使pIdx成为DWORD指针而不是BYTE指针。如果你不这样做,你会碰到很多指针算术问题。 – cactus1

+0

你正在使用哪种编译器?它不会抱怨VS2008和VS2013。 – cup

+0

VS 2010,我在2008年没有尝试过 – user3281950

回答

2

有你要投的BYTE类型为DWORD或相反像一个简单的解决方案:

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

但这使我问你在做什么。 DWORD是一个更大的存储空间,指针指向BYTE类型 - 因此这种比较看起来很危险,就像当n> 255时可能发生细微溢出错误的地方。

另外你对++操作符的诡计看起来很混乱 - 你清楚这个操作符是不是将指针递增到下一个字节,而是递增当前指向的字节的值?

0

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

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

PDX使得BYTE,如PDX是BYTE 你前置自增的是,结果是一个BYTE 现在你用正比较,这是DWORD 将所得表达将DWORD,如DWORD比BYTE更宽,但应该工作。 什么问题?