You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C++中将void*转换为void**?nRF52833项目编译报错求助

解决C++编译Nordic NUS库时的void*类型不兼容错误

错误原因

C的类型安全检查比C严格,你的代码中&p_client是ble_nus_client_context_t**类型,原代码用C风格强制转换(void *)将其转为void*,但blcm_link_ctx_get的第三个参数需要void**类型,二者在C中属于不兼容的指针类型,因此触发编译错误。

解决方法

使用reinterpret_cast完成类型转换——这是C++中用于不同指针类型之间强制转换的正确方式,static_cast无法处理这种跨层级的不相关指针类型转换。

修改后的代码如下:

ble_nus_client_context_t * p_client = NULL;

err_code = blcm_link_ctx_get(p_nus->p_link_ctx_storage, p_ble_evt->evt.gap_evt.conn_handle, 
                             reinterpret_cast<void**>(&p_client));

批量处理

项目中另外3处相同错误,都可以用同样的方式替换原有的(void*)转换,统一改为reinterpret_cast<void**>(目标指针的地址)即可。

替代方案(可选)

如果不想修改Nordic官方库文件ble_nus.c,可以在构建脚本(CMake/Makefile)中单独指定该文件用C编译器(如gcc)编译,绕过C的严格类型检查。但如果必须用C编译整个项目,上述类型转换是最直接的解决方式。

内容的提问来源于stack exchange,提问作者Jaekwon.Kim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 07:09:53