Я использую DenseCRF библиотеку, и я хотел, чтобы создать вектор класса этого объекта, но я получаю следующее сообщение об ошибке:Создание вектора не-Copyable объектов
/usr/include/c++/4.6/ext/new_allocator.h:108:9: error: no matching function for call to ‘DenseCRF::DenseCRF(const DenseCRF&)’
/densecrf2/include/densecrf.h:48:2: note: no known conversion for argument 1 from ‘const DenseCRF’ to ‘DenseCRF&’
Это какой класс DenseCRF. ч выглядит следующим образом:
/**** DenseCRF ****/
class DenseCRF{
protected:
// Number of variables and labels
int N_, M_;
// Store the unary term
UnaryEnergy * unary_;
// Store all pairwise potentials
std::vector<PairwisePotential*> pairwise_;
// Don't copy this object, bad stuff will happen
DenseCRF(DenseCRF & o){}
public:
// Create a dense CRF model of size N with M labels
DenseCRF(int N, int M);
virtual ~DenseCRF();
}
Это утонченный вариант denseCRF.h и ошибки, что указывает на проблему с denseCRF.h: 48, относится к строке 14 в этом фрагменте кода:
DenseCRF(DenseCRF & o){}
В основной программе, я пытаюсь создать вектор этого класса, но как только я хочу puch_back экземпляра объекта, он поднимает выше ошибки:
std::vector<DenseCRF> crf_vec;
DenseCRF crf(W, H);
crf_vec.push_back(crf);
Я гугл немного и понял, что Мне может понадобиться определить конструктор копирования, но не знаю, как и где. Может ли кто-нибудь помочь мне с этой проблемой?
Спасибо!
P.S. Имеет ли этот вопрос какое-либо отношение к комментариям авторов в строке 13?
Есть ли «Не копировать этот объект, плохой материал произойдет» недостаточно ясно? –
A 'std :: vector' нуждается в 'T', чтобы обеспечить правильный конструктор копирования, как указано в [справочной документации] (http://en.cppreference.com/w/cpp/container/vector). –
@ πάνταῥεῖ это требование было смягчено в C++ 11 –