长话短说:博士;我收到此错误 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 是否也传递了参数?
最佳答案
在c中,int (*)()
是指向一个函数的指针,该函数返回int
并接受未指定数量的参数,在c++中它是指一个函数返回 int
并采用 0 参数,因此这就是为什么它在 c 中编译但在 c++ 中不编译的原因。
要解决此问题,需要更多信息,但您可以简单地为具有正确签名的函数编写一个重载,然后从其中调用另一个函数。
关于c++ - 迁移 C-->C++ 指向函数的指针会引发编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46042022/