我想知道创建一个" CvSVM"对象。我尝试过使用:
vector<CvSVM> svm_bank;
但每当我使用时:
new_model.train(training_inputs, targets, Mat(), Mat(), svm_params);
svm_bank.push_back(new_model);
我收到此错误:
c:\ program files(x86)\ microsoft visual studio 12.0 \ vc \ include \ xmemory0(593):错误C2248:&#39; CvSVM :: CvSVM&#39; :无法访问类&#39; CvSVM&#39;
中声明的私有成员
我使用Visual Studio 2013,OpenCV版本2.4.11。
答案 0 :(得分:1)
我找到了解决方案。这是Miki的修改版。由于Miki的代码正在编译,但在执行代码时出现了运行时错误。
这解决了这个问题。
#include <opencv2\opencv.hpp>
#include <vector>
using namespace std;
using namespace cv;
int main()
{
vector<Ptr<SVM>> svm_bank;
for (int i = 0; i < 3; ++i)
{
Mat trainData;
Mat responses;
/*Code for trainingData and
responses */
SVM *new_model;
new_model = new SVM;
new_model->train(trainData, responses);
svm_bank.push_back(new_model);
}
for (int i = 0; i < 3; ++i)
{
Mat samples;
Mat results;
svm_bank[i]->predict(samples, results);
}
return 0;
}
答案 1 :(得分:0)
std :: vector :: push_back将尝试调用复制构造函数,正如您所见,in the header被标记为私有。
我建议使用emplace_back(),它在添加时直接构造对象。直接调用train()的构造函数重载存在,因此它是一个选项。
svm_bank.emplace_back(training_inputs, targets, Mat(), Mat(), svm_params);