3

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

错误:错误 1 ​​错误 C2664:“包装器”:无法将参数 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 ;

}
4

5 回答 5

5

您将函数调用的结果传递inc(3)wrapper,而不是预期的函数指针。

a = wrapper(3, &inc) ;

于 2011-06-13T14:54:16.810 回答
1

您的调用传递了一个整数,即调用的返回值inc(3),即 4。

那不是函数指针。

也许你的意思是:

a = wrapper(3, inc);

这将起作用,并将 a 分配给int使用参数调用的值3

于 2011-06-13T14:54:11.053 回答
1

就像现在一样,wrapper接受一个int和一个指向一个函数的指针,该函数接受一个int并返回一个int。您正在尝试将一个 int 和一个 int 传递给它,因为您不是将a 指针传递给 function,而是调用该函数并传递返回值 (an int)。要使您的代码按(我认为)您期望的那样工作,请将您的调用更改wrapper为:

a = wrapper(3, &inc);
于 2011-06-13T14:55:28.193 回答
1

该行:

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

有效地:

a = wrapper(3, 4);

我想你的意思是:

a = wrapper(3, inc);

这会将指向 inc() 函数的指针作为 wrapper() 的第二个参数传递。

于 2011-06-13T14:55:30.513 回答
1

我的程序中有这个错误:

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

因为我写的方法定义晚于主要方法。当我剪切主要方法并将其粘贴在函数定义之后,错误被删除。

于 2012-05-29T15:19:20.890 回答