C++中void*转换为struct*编译报错的解决方法咨询
问题描述
在实现相关代码时,因程序依赖C库需用C编译,但编译失败,报错invalid conversion from void* to struct*,问题出在arg_struct *args = arguments;这一行。
可复现代码:
struct arg_struct { int low; int high; }*args; void request_from_someone(void * arguments) { arg_struct *args = arguments; /****do something******/ } int main(){ /***nothing to see here, just trying to give a compilation error***/ return 0; }
解决方法
C++对类型转换的检查比C更严格,不允许void*隐式转换为其他指针类型,必须显式转换。有两种常用解决方式:
- C风格强制转换
修改报错行:
arg_struct *args = (arg_struct*)arguments;
- C++风格
static_cast(推荐)
使用更符合C++规范、更安全的类型转换:
arg_struct *args = static_cast<arg_struct*>(arguments);
两种方式均可解决编译错误,static_cast在C++中可读性更强,且能避免一些不合理的转换,建议优先使用。
内容的提问来源于stack exchange,提问作者DeadlyKitten999
相关产品推荐
相关产品推荐

