Met*_*est -3 c c++ compiler-errors
我正在将遗留的C程序移植到C++.但是,编译器并不满意,需要对C++进行额外的类型转换.例如,我有这个功能......
void foreach_element_in_patch(Patch *patch, void (*func)(),
long arg1, long process_id);
Run Code Online (Sandbox Code Playgroud)
在最初的C代码中,它就像这样使用......
foreach_element_in_patch( patch, display_interactions_in_element,
mode, process_id );
Run Code Online (Sandbox Code Playgroud)
但是,对于C++,我需要对第二个参数进行类型转换,以阻止编译器生成错误.
foreach_element_in_patch( patch, (void (*)())display_interactions_in_element,
mode, process_id );
Run Code Online (Sandbox Code Playgroud)
编译器生成的错误如下......
invalid conversion from ‘void (*)(Patch*, long int, long int)’ to ‘void (*)()’
Run Code Online (Sandbox Code Playgroud)
现在有一种方法可以让编译器不要为这些事情生成错误.我试过用这个函数加前缀,extern "C"但C++编译器仍然不满意.我的应用程序加载了这样的代码,我没有时间调整这么多代码.
错误非常明显,您的演员表无效.您不能使用将参数作为不带参数的函数的函数.
要使代码正常工作,您需要:
display_interactions_in_element使用合理默认值调用的新函数.请注意,如果您的代码尝试将该函数调用为稍后使用参数,则意味着代码从根本上被破坏.
是的,有一种方法.将代码编译为C.
C++具有更严格的类型安全规则,并要求您显式转换可以在C中隐式转换的类型.
因此,要么将代码编译为C,要么将代码所需的修改作为有效的C++,并将其编译为C++.
您应该能够将C文件编译为C,将C++文件编译为C++,然后将它们链接在一起而不会出现问题.
但是当您尝试将C文件编译为C++时,编译器会告诉您代码是否无效C++.
| 归档时间: |
|
| 查看次数: |
177 次 |
| 最近记录: |