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

QT中QExplicitlySharedDataPointer执行dynamic_cast转换报错如何解决?

问题解答

错误根因

dynamic_cast语法要求转换的目标类型必须是原生指针或原生引用类型,你代码中EntityExtended::ConstPointer是QExplicitlySharedDataPointer的别名,属于智能指针对象类型,不满足dynamic_cast的类型要求,因此触发编译报错。

正确实现方式

Qt的QExplicitlySharedDataPointer已经内置了动态类型转换的能力,有两种可行写法:

  • 直接调用智能指针的内置dynamicCast方法:
auto extendedEntity = entity.dynamicCast<const EntityExtended>();
  • 先取出原生指针完成dynamic_cast转换后,再封装回智能指针:
const Entity* rawPtr = entity.data();
const EntityExtended* extendedRawPtr = dynamic_cast<const EntityExtended*>(rawPtr);
EntityExtended::ConstPointer extendedEntity(extendedRawPtr);

额外注意事项

  • 基类Entity必须定义虚析构函数或者其他虚函数,否则dynamic_cast无法执行运行时类型检查,同样会编译失败
  • MSVC编译器需要开启RTTI(运行时类型信息)编译选项才能正常使用dynamic_cast,Qt项目默认开启该选项,如果你手动关闭过需要重新打开

内容的提问来源于stack exchange,提问作者Klypto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:00:01