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

xyi*_*ous 2 c c++ pointers

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);
Run Code Online (Sandbox Code Playgroud)

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

我甚至不知道为什么这在C中工作,我无法访问被调用函数中的代码.

问题:我可以以某种方式投射int (*)(int)int (*)()?再次提到"为什么这个有用呢?" 指向的函数实际上使用了参数,即使我们声明了一个没有参数的函数指针,C也会传递参数吗?

Iha*_*imi 9

在c中,int (*)()表示指向函数的指针,该函数返回int并获取未指定数量的参数,在c ++中它表示返回a int并接受0参数的函数,因此这就是它在c中编译但在c ++中不编译的原因.

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