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

标签 c++ c pointers

长话短说:博士;我收到此错误 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/

相关文章:

C-SYSMALLOC : Assertion failed (realloc)

C++ 到 C 的区别 & *

c - 指向指针的指针?

c++ - boost::任何带有 char[] 的 map

c++ - typedef 中的 C/C++ 前向声明

c++ - 将 std::cout 重定向到 QTextEdit

c++ - 修改指向另一个指针的指针

c++ - C++中调用析构函数和构造函数的顺序是什么

c - 为什么我在覆盖易受攻击程序的 ret 地址时得到 "Cannot find bound of current function"?

c - valgrind 在 asprintf 调用后检测内存泄漏,即使调用了 free