迁移C-> C ++函数指针会引发编译器错误

xyious

TL:DR; error: initializing argument 2 of 'int SocketSrv(int, int (*)(), int*, int, int, int)'编译以前作为C ++的C的项目时出现此错误该程序毫无警告地(无论如何在那一行)编译为C代码。

代码是:

rtn=SocketSrv(RxServConfig->port_nbr1, fn, &RxDataSocketId,
            RxServConfig->max_children,
            RxServConfig->shmemkey,
            RxServConfig->semkey);

问题是,我们将一个指向函数的指针提供给int function (int)期望一个的函数int function()

我什至不知道为什么它可以在C语言中工作,而且我无法访问被调用函数中的代码。

问题:我可以以某种方式投射int (*)(int)int (*)()吗?并再次提到“为什么这行得通?” 指向的函数实际上使用了参数,即使我们声明了不带参数的函数指针,C也会传递参数吗?

伊哈罗布·阿西米(Iharob Al Asimi)

在c中,int (*)()表示返回int并接受未指定数量的参数的函数的指针,在c ++中,表示返回anint并接受0个参数的函数,因此这就是为什么它在c中编译但不在c ++中编译的原因。

要解决此问题,需要更多信息,但是您可以简单地为具有正确签名的函数编写重载,然后从其中调用另一个。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章