将函数作为另一个函数的参数传递时遇到一些麻烦......
错误:错误1错误C2664:'wrapper' :无法转换参数1 'int'到'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 ;
}
答案 0 :(得分:5)
您将函数调用inc(3)
的结果传递给wrapper
,而不是预期的函数指针。
a = wrapper(3, &inc) ;
答案 1 :(得分:1)
你的电话正在传递一个整数,即调用inc(3)
的返回值,即4。
这不是函数指针。
也许你的意思是:
a = wrapper(3, inc);
这样可行,并使用参数int
分配调用3
的值。
答案 2 :(得分:1)
就像现在一样,wrapper
采用int
和指向函数的指针,该函数需要一个int
并返回int
。您试图将它传递给int和int,因为您不是将指向函数,而是调用函数并传递返回值( int
)。为了使您的代码符合您的预期(我认为),请将您的调用更改为wrapper
:
a = wrapper(3, &inc);
答案 3 :(得分:1)
该行:
a = wrapper( 3, inc( 3 ) ) ;
实际上是:
a = wrapper(3, 4);
我认为你的意思是:
a = wrapper(3, inc);
这将指向inc()函数的指针作为wrapper()的第二个参数传递。
答案 4 :(得分:1)
我的程序中出现此错误:
error C2664: 'glutSpecialFunc' : cannot convert parameter 1 from 'void (__cdecl *)(void)' to 'void (__cdecl *)(int,int,int)'
因为我比main方法更晚写了方法定义。 当我剪切main方法并在功能定义之后粘贴它时,错误被移除。