gpt4 book ai didi

c++ - CvSVM(const CvSVM&)’是私有(private)的

转载 作者:太空狗 更新时间:2023-10-29 21:00:19 24 4
gpt4 key购买 nike

在使用线路时...

map<string,CvSVM> classes_classifiers;
classes_classifiers.insert(pair<string,CvSVM>(class_,CvSVM()));

当我编译它时,我收到了错误...

In file included from predict.cpp:10:0: /usr/include/c++/4.7/bits/stl_pair.h: In instantiation of ‘std::pair<_T1, >_T2>::pair(const _T1&, const _T2&) [with _T1 = std::basic_string; _T2 = CvSVM]’: predict.cpp:99:64: required from here /usr/local/include/opencv2/ml/ml.hpp:553:5: error: ‘CvSVM::CvSVM(const CvSVM&)’ is private In file included from /usr/include/c++/4.7/utility:72:0, from /usr/include/c++/4.7/algorithm:61, from /usr/local/include/opencv2/core/core.hpp:56, from /usr/local/include/opencv2/highgui/highgui.hpp:46, from predict.cpp:4: /usr/include/c++/4.7/bits/stl_pair.h:105:31: error: within this context

谁能告诉我如何解决这个问题。我是初学者,我正在制作这个区分不同图像集的项目。我已经下雨了我的支持 vector 机,并在不同的文件中保存了不同类别图像的数据。现在我需要预测。请帮忙谢谢你

最佳答案

该错误表示 CvSVM 的复制构造函数类是私有(private)的;因此,您根本无法编写需要 CvSVM 的有效代码要复制的对象。因此,您不能复制包含 CvSVM 的类。对象,例如一对。并调用map::insert复制一份。

您可能想要做的第一件事是检查是否有支持 C++11 的更新版本的库。 CvSVM 很可能即使无法复制,也可以移动类。如果是这样,这段代码应该可以在不修改的情况下针对较新的版本进行编译。

如果没有,但是有 C++11 支持,您可以直接在容器中构建对象,这样就不需要复制 完全没有动过。然而,当容器是一个映射时,这有点棘手,因为您必须构造的值实际上是一个,其第二个元素是一个CvSVM。 .这是你如何做的:

classes_classifiers.emplace(piecewise_construct, make_tuple(class_), make_tuple());

另一种可能性,如果你有 C++11 支持,是存储 unique_ptr<CvSVM> map 中的对象而不是 CvSVM对象本身。 unique_ptr的使用保证当你从 map 中删除一个元素时,对象是 delete d:

map<string,unique_ptr<CvSVM>> classes_classifiers;
classes_classifiers.insert(make_pair(class_, unique_ptr<CvSVM>(new CvSVM())));

如果您没有 C++11 支持,您唯一的选择是将原始指针存储到 CvSVM在你的 map 上。这不是最佳选择,因为它需要您 delete在从映射中删除之前的每个指针,否则你会泄漏内存。

关于c++ - CvSVM(const CvSVM&)’是私有(private)的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22335303/

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