2012-06-10 35 views
0

當我使用函數GradientFill()時,出現編譯錯誤;在我的原生WinAPI C++應用程序中當我使用GradientFill()函數時無法編譯代碼

我在做什麼錯?我怎樣才能讓我的代碼編譯?我正在使用Microsoft Visual C++ 2010 Express

在我的項目中,我鏈接了正確的庫msimg32.lib文件。請參閱下面我所有鏈接的文件(項目屬性 - >連接器 - >輸入 - >附加依賴):

comctl32.lib;kernel32.lib;gdi32.lib;winspool.lib;msimg32.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)

編譯錯誤:

1>c:\users\app.cpp(129): error C2064: term does not evaluate to a function taking 6 arguments

導致編譯錯誤代碼:

void TransparentCheckbox::verticalGradient(HDC hDC, const RECT& GradientFill, COLORREF rgbTop, COLORREF rgbBottom) 
{ 
    GRADIENT_RECT gradientRect = { 0, 1 }; 
    TRIVERTEX triVertext[ 2 ] = { 
     GradientFill.left - 1, 
     GradientFill.top - 1, 
     GetRValue(rgbTop) << 8, 
     GetGValue(rgbTop) << 8, 
     GetBValue(rgbTop) << 8, 
     0x0000,     
     GradientFill.right, 
     GradientFill.bottom, 
     GetRValue(rgbBottom) << 8, 
     GetGValue(rgbBottom) << 8, 
     GetBValue(rgbBottom) << 8, 
     0x0000 
    }; 

    // Below is line 129 
    GradientFill(hDC, triVertext, 2, &gradientRect, 1, GRADIENT_FILL_RECT_V); 
} 

回答

5

你已經聲明瞭一個參數; GradientFill as const RECT &,然後調用Windows GradientFill過程 - 這會導致衝突。我會更改參數的名稱,或者您可以將過程調用的範圍限定爲:: GradientFill

+0

謝謝。我覺得這樣一個白癡大聲笑,我認爲這是一些主要的鏈接器錯誤,不只是參數/函數名稱衝突哈哈。 MVC++需要更多的信息編譯錯誤描述,儘管 –

+0

@JakeM,GCC對我來說足夠豐富。這就像'GradientFill不能用作函數'一樣。我想,一旦你看到它幾次,不管錯誤消息的詳細程度如何,你都會馬上識別它。 – chris