2015-08-03 39 views
0
的參數不兼容

問題是&cursorTile.Attributes.
我越來越被(argument of type "WORD*" is incompatible with parameter of type "LPCWSTR")
我試圖找到一些解決辦法,我用的多字節字符集的錯誤。參數*與類型LPCWSTR

void CMap::Draw(){ 
SMALL_RECT drawRect = { 0, 0, MAP_WIDTH - 1, MAP_HEIGHT - 1 }; 
COORD buffersize = { MAP_WIDTH, MAP_HEIGHT }; 
COORD zeroZero = { 0, 0 }; 
DWORD dwResult = 0; 
char szCursor[2] = ""; 

HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE); 

for (int i = 0; i < (int)m_vTiles.size(); i++){ 
    m_screenBuffer[i] = m_vTiles[i].GetChar(); 
} 

WriteConsoleOutput(hOutput, m_screenBuffer, buffersize, zeroZero, &drawRect); 

if (g_pCursorTile != NULL){ 
    CHAR_INFO cursorTile = g_pCursorTile->GetChar(); 
    sprintf(szCursor, "%c", cursorTile.Char); 
    WriteConsoleOutputCharacter(hOutput, szCursor, 1, g_cursorPos, &dwResult); 
    WriteConsoleOutputCharacter(hOutput, &cursorTile.Attributes, 1, g_cursorPos, &dwResult); 
} 
+0

它是'WORD'還是'DWORD'? – Praveen

+0

錯誤說它是WORD * –

+0

您對WriteConsoleOutputCharacter的第二次調用應該是對WriteConsoleOutputAttribute的調用。 OMG! –

回答

1

這是非常explenetory錯誤。 WriteConsoleOutputCharacter需要一些字符串作爲第二個參數。如果你的程序被定義爲unicode,它預計LPCWSTR,這基本上是一個(醜)類型定義到一個以空字符結尾的wchar_t*字符串。

在您的調用中,您通過&cursorTile.Attributes,其類型爲DWORD*(這又是醜的類型定義爲unsigned long*)。您需要傳遞一些寬字符串而不是無符號長指針,即您嘗試打印的字符串。

+0

我不明白的是cursorTile的類型是CHAR_INFO而不是DWORD。 dwResult的類型是DWORD –

+0

是的,但它抱怨的東西完全不同。閱讀我的答案。 –

+0

k所以我明白的是,我使用2種類型的字符串?而writeconsoleoutputcharacter則希望我使用與LPCWSTR相關的一個。 sry如果我聽起來dum im仍在學習C++ –

0

DWORD:一個32位無符號整數。範圍是0到4294967295 十進制。

typedef unsigned long DWORD; 

LPCWSTR:一個指針,指向16位 Unicode字符的恆定空終止字符串。

typedef CONST WCHAR *LPCWSTR; 

兩者是不同的數據類型完全。

相關問題