嵌入Python的C++中Report实例转回原结构体失败,如何解决?
问题原因及解决方案
核心错误点
- Python代码中类名拼写错误:你导出的C++结构体是
Report,但Python里写的是embedded.Result,名称不匹配。 - 未创建类的实例:直接操作类本身而非实例,返回的是类对象而非
Report实例,C++无法将类对象转换为Report结构体实例。
修正后的Python代码
import embedded def get_count(): # 创建Report类的实例,而非直接引用类 result = embedded.Report() result.Count = 10 return result
逻辑说明
修正后,Python返回的是Report类的实例对象,和你在C中用py::cast(r1)生成的对象类型完全一致,此时C代码中的result.cast<Report>()就能正常完成类型转换。
你之前在C++中直接转换成功的案例,本质是操作Report实例;而原Python代码返回的是类本身,类型不匹配才导致转换失败,修正后即可解决问题。
内容的提问来源于stack exchange,提问作者DLT
相关产品推荐
相关产品推荐

