gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:43:37 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com