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

时间:2017-09-04 17:50:29

标签: c++ c pointers

TL:DR;在编译曾经是C作为C ++的项目时,我收到此错误error: initializing argument 2 of 'int SocketSrv(int, int (*)(), int*, int, int, int)'。该程序在没有警告的情况下编译(无论如何在那条线上)作为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也会传递参数吗?

1 个答案:

答案 0 :(得分:9)

在c中,int (*)()表示指向函数的指针,该函数返回int并且获取未指定数量的参数,在c ++中它表示返回int并且使用 0 参数,这就是为什么它在c中编译但它在c ++中没有。

要解决此问题,需要更多信息,但您可以使用正确的签名为函数编写重载,并从其中调用另一个。