错误C2664:无法将参数1从'int'转换为'int(__ cdecl *)(int)'

时间:2011-06-13 14:52:10

标签: c++ function parameters c2664

将函数作为另一个函数的参数传递时遇到一些麻烦......

  

错误:错误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 ;

}

5 个答案:

答案 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方法并在功能定义之后粘贴它时,错误被移除。