CvSVM(const CvSVM&)' is private
CvSVM(const CvSVM&)’ is private
同时使用…
map<string,CvSVM> classes_classifiers;
classes_classifiers.insert(pair<string,CvSVM>(class_,CvSVM()));
当我编译它时,我得到了错误…
谁能告诉我怎么解决这个问题?我是初学者,我使这个项目区分不同的图像集。我已经下雨了我的SVM,并将不同类别的图像数据保存在不同的文件中。现在我需要预测一下。请帮助谢谢你包含在predict.cpp:10:0的文件中:/usr/include/c++/4.7/bits/stl_pair.h:在实例化' std::pair<_T1,>_T2>::pair(const _T1&, const _T2&) [with _T1 = std::basic_string;_T2 = CvSVM] ';Predict.cpp:99:64:从这里需要/usr/local/include/opencv2/ml/ml.hpp:553:5:错误:' CvSVM::CvSVM(const CvSVM&) '是私有的/usr/include/c++/4.7/utility:72:0从/usr/include/c + +/4.7/算法:61,从/usr/local/include/opencv2/core/core.hpp: 56岁从/usr/local/include/opencv2/highgui/highgui.hpp: 46岁从predict.cpp: 4:/usr/include/c++/4.7/bits/stl_pair.h:105:31: error: within this context
这个错误意味着CvSVM
类的复制构造函数是私有的;因此,您根本无法编写需要复制CvSVM
对象的有效代码。因此,您也不能复制包含CvSVM
对象的类,例如pair。调用map::insert
生成一个副本。
您可能要做的第一件事是检查是否有支持c++ 11的新版本的库。很有可能CvSVM
类可以移动,即使它不能被复制。如果是这样,这段代码应该可以编译而不需要修改一个新版本。
如果没有,但是您有c++ 11支持,您可以在容器中直接构造对象,这样就不需要复制或移动。但是,当容器是映射时,这有点棘手,因为必须构造的值实际上是对,其第二个元素是CvSVM
。你应该这样做:
classes_classifiers.emplace(piecewise_construct, make_tuple(class_), make_tuple());
另一种可能性,如果你有c++ 11的支持,是在你的映射中存储unique_ptr<CvSVM>
对象而不是CvSVM
对象本身。使用unique_ptr
保证当你从映射中删除一个元素时,对象是delete
d:
map<string,unique_ptr<CvSVM>> classes_classifiers;
classes_classifiers.insert(make_pair(class_, unique_ptr<CvSVM>(new CvSVM())));
如果你没有c++ 11支持,你唯一的选择是在你的映射中存储指向CvSVM
的原始指针。这不是最优的,因为它要求您在从映射中擦除指针之前对每个指针进行delete
,否则会泄漏内存。
- Why is UINT32_MAX + 1 = 0?
- C++错误:"error: int aaa::bbb is protected within this context"
- 创建具有 new in 函数和"this is nullptr"异常的对象
- 使用 cmake 的 Linux 终端上的"Conversion to non-scalar type is requested"错误
- Is !NaN not a NaN?
- Directx 11 - CompileFromFile() is not compiling
- Centos7 g++ "to_string is not in a member of std"
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- Where is std::hardware_destructive_interference_size?
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- What is unordered_set in C++
- 你如何理解"std: :forward is just syntactic sugar"?这是真的吗?
- C++ "error: use of overloaded operator '*' is ambiguous"似乎只有一场比赛
- C++ is calculating wrong
- Is it good to use SDL_PIXELFORMAT_UNKNOWN?
- reference_wrapper导致"incomplete type is not allowed"
- 为什么即使在定义之后仍存在"Identifier is undefined error "?
- 结构中的错误"Incomplete type is not allowed"
- Crash in boost::archive::text_iarchive in_archive {is} boost
- CvSVM(const CvSVM&)' is private