2014-04-10 91 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更寬,但應該工作。 什麼問題?