gpt4 book ai didi

c++ - 调用 cv::stereoBM 构造函数时出错

转载 作者:行者123 更新时间:2023-11-28 04:13:11 25 4
gpt4 key购买 nike

如果我像这样 decalre 一个 stereoBM 的实例

cv::StereoBM bmState; 

编译器抛出错误:

cannot declare field ‘bmState’ to be of abstract type ‘cv::StereoBM’

但是当我声明它时

cv::Ptr<cv::StereoBM> bm  = cv::StereoBM::create(16,21); 

然后就可以了。

请解释如何继续使用前一种方法。

最佳答案

恐怕你运气不好,我认为你做不到。根据https://docs.opencv.org/3.4/d9/dba/classcv_1_1StereoBM.html , StereoBM是一个抽象类,即它的一些成员函数是纯虚的,因此不能直接实例化。

查看 cv::StereoBM::create 的实现https://github.com/opencv/opencv/blob/master/modules/calib3d/src/stereobm.cpp我们可以在cpp文件中看到StereoBM的非抽象派生类被定义,即StereoBMImpl .在 create它的一个实例被分配并作为 Ptr<StereoBM> 返回.现在,我认为您无法访问 StereoBMImpl即使可以,我也强烈建议不要这样做,文档清楚地规定了使用该类的方法,如果您希望代码可移植,您应该坚持使用。

最终这是您必须接受的设计。如果您能告诉我们为什么您绝对需要使用第一个声明,也许我们可以尝试提供帮助。

有关抽象基类的更多信息,请参阅 https://en.cppreference.com/w/cpp/language/abstract_class

关于c++ - 调用 cv::stereoBM 构造函数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57234187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com