gpt4 book ai didi

c++ - 阻止编译器在具有遗留 C 代码的 C++ 代码中生成错误

转载 作者:行者123 更新时间:2023-11-30 20:43:55 25 4
gpt4 key购买 nike

我正在将旧版 C 程序移植到 C++。然而,编译器并不高兴,需要对 C++ 进行额外的类型转换。比如我有这个功能...

 void foreach_element_in_patch(Patch *patch, void (*func)(), 
long arg1, long process_id);

在原来的C代码中,是这样使用的...

 foreach_element_in_patch( patch, display_interactions_in_element, 
mode, process_id );

但是,对于 C++,我需要对第二个参数进行类型转换以阻止编译器生成错误。

 foreach_element_in_patch( patch, (void (*)())display_interactions_in_element, 
mode, process_id );

编译器生成的错误如下...

invalid conversion from ‘void (*)(Patch*, long int, long int)’ to ‘void (*)()’

现在有没有办法要求编译器不要为此类事情生成错误。我已尝试在该函数前添加 extern "C"前缀,但 C++ 编译器仍然不满意。我的应用程序加载了这样的代码,我没有时间调整这么多代码。

最佳答案

错误非常明显,并且您的转换无效。您不能将接受参数的函数用作不接受参数的函数。

为了让您的代码正常工作,您需要:

  1. 创建一个新函数,使用合理的默认值调用 display_interactions_in_element
  2. 或者使用具有相同功能的无捕获和无参数 lambda(不过,您的编译器可能尚不支持它)。

请注意,如果您的代码尝试调用该函数,就好像它稍后接受参数一样,则意味着该代码从根本上被破坏了。

关于c++ - 阻止编译器在具有遗留 C 代码的 C++ 代码中生成错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7353032/

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