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

3

我有些困难,无法将一个函数作为另一个函数的参数传递...

错误: 错误 1 错误 C2664: 'wrapper' : 无法将第一个参数从 '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个回答

5
你正在将函数调用的结果 inc(3) 作为参数传递给 wrapper,而不是它所期望的函数指针。 a = wrapper(3, &inc) ;

1
我在我的程序中遇到了这个错误:
error C2664: 'glutSpecialFunc' : cannot convert parameter 1 from 'void (__cdecl *)(void)' to 'void (__cdecl *)(int,int,int)'

因为我把方法定义写在主方法后面。 当我把主方法剪切并粘贴到函数定义后面时,错误消失了。


1

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

那不是函数指针。

也许您的意思是:

a = wrapper(3, inc);

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

1

目前来看,wrapper 接受一个 int 和一个指向函数的指针,该函数接受一个 int 并返回一个 int。您试图传递一个整数和一个整数,因为您没有传递 函数指针,而是在 调用 函数并传递返回值(一个 int)。为使您的代码按照您的期望工作,请将对 wrapper 的调用更改为:

a = wrapper(3, &inc);

1
非常感谢大家的快速回复。我之前遇到过这个问题,不过在不理解问题的情况下设法让它工作了。现在这次它能够正常运行并且我也明白了原因。再次感谢! - tuk

1

这行代码:

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

实际上是:

a = wrapper(3, 4);

我想你的意思是:

a = wrapper(3, inc);

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接