2011-06-13 263 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)' 

,因为我有方法的定义不是主要方法后来写道。 当我削减主要方法并粘贴它晚于定义的函数,错误删除。

相关问题