2011-06-13 262 views
1

遇到了一些麻煩傳遞一個函數作爲另一個函數的參數...錯誤C2664:無法從 '詮釋' 轉換參數1 'INT(__cdecl *)(int)的'

ERROR: Error 1 error C2664: 'wrapper' : cannot convert parameter 1 from 'int' to 'int (__cdecl *)(int)'

int inc(int n) 
{ 
    return n + 1 ; 
} 

int dec(int n) 
{ 
    return n - 1 ; 
} 

int wrapper( int i, int func(int) ) 
{ 
    return func(i) ; 
} 


int main(){ 

    int a = 0 ; 

    a = wrapper( 3, inc(3) ) ; 

    return 0 ; 

} 

回答

5

您正在將函數調用inc(3)的結果傳遞給wrapper,而不是它所期望的函數指針。

a = wrapper(3, &inc) ;

1

您的呼叫正在傳遞一個整數,返回值來自呼叫inc(3),即4.

這不是一個函數指針。

也許你的意思是:

a = wrapper(3, inc); 

這會工作,並指派調用int與參數3的價值。

1

因爲它是現在,wrapper需要一個int和指向,它有一個int並返回一個int的功能。您試圖將它傳遞給一個int和一個int,因爲不是將指針傳遞給函數,而是調用函數並傳遞返回值(一個int)。爲了讓你的代碼爲工作(我覺得)你想到,你的電話改變wrapper這樣的:

a = wrapper(3, &inc); 
+1

非常感謝大家的快速回復..我之前有過這個問題,並以某種方式設法得到它的工作沒有了解問題......現在這個時候它的工作,我明白了爲什麼..再次感謝 – tuk 2011-06-13 15:20:20

1

行:

a = wrapper( 3, inc(3) ) ; 

是有效的:

a = wrapper(3, 4); 

我認爲你的意思是:

a = wrapper(3, inc); 

這將傳遞給inc()函數的指針作爲wrapper()的第二個參數。

1

我有這個錯誤在我的計劃:

error C2664: 'glutSpecialFunc' : cannot convert parameter 1 from 'void (__cdecl *)(void)' to 'void (__cdecl *)(int,int,int)' 

,因爲我有方法的定義不是主要方法後來寫道。 當我削減主要方法並粘貼它晚於定義的函數,錯誤刪除。

相關問題