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

Qt项目调用Insta360 SDK时自定义StreamDelegate派生类新增方法报错

问题原因

你将TestStreamDelegate实例的智能指针赋值给了基类ins_camera::StreamDelegate类型的指针,编译器只会根据指针声明的类型识别可用成员,基类本身没有定义setupThread方法,因此触发编译报错。

解决方案

方案1:操作派生类指针后再转基类(最推荐)

在实例化后优先用派生类类型的指针调用自定义方法,再传给SDK的基类指针参数,无需任何类型转换,安全性最高:

// 先定义派生类类型的智能指针
auto test_delegate = std::make_shared<TestStreamDelegate>();
// 调用自定义方法
test_delegate->setupThread("TEST");
// 再传给SDK接口,会自动隐式转换为基类智能指针
camera->SetStreamDelegate(test_delegate);

方案2:基类指针强转为派生类指针

如果你的业务场景只能拿到基类类型的智能指针,可以用智能指针的强制转换操作:

  • 确定基类指针一定指向TestStreamDelegate实例时用std::static_pointer_cast,性能更高:
std::shared_ptr<ins_camera::StreamDelegate> delegate = std::make_shared<TestStreamDelegate>( );
auto test_delegate = std::static_pointer_cast<TestStreamDelegate>(delegate);
test_delegate->setupThread("TEST");
camera->SetStreamDelegate(delegate);
  • 不确定指针指向类型时用std::dynamic_pointer_cast,转换失败会返回空指针,可以做异常判断:
std::shared_ptr<ins_camera::StreamDelegate> delegate = std::make_shared<TestStreamDelegate>( );
if (auto test_delegate = std::dynamic_pointer_cast<TestStreamDelegate>(delegate)) {
    test_delegate->setupThread("TEST");
}
camera->SetStreamDelegate(delegate);
额外注意

你的TestStreamDelegate析构函数只关闭了file1_和file2_两个文件指针,filel_、filer_没有执行fclose,会造成资源泄漏,建议补充对应的关闭逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:27:04