【发布时间】:2014-12-10 07:59:03
【问题描述】:
我正在使用DenseCRF 库,我想生成此对象类的向量,但出现以下错误:
/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.h 类的样子:
/**** 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有问题的错误,参考此代码sn-p中的第14行:
DenseCRF( DenseCRF & o ){}
在主程序中,我试图创建这个类的向量,但是一旦我想 puch_back 一个对象实例,它就会引发上述错误:
std::vector<DenseCRF> crf_vec;
DenseCRF crf(W, H);
crf_vec.push_back(crf);
我搜索了一下,意识到我可能需要定义一个复制构造函数,但不确定如何以及在哪里。有人可以帮我解决这个问题吗?
谢谢!
附:这个问题和第13行作者的cmets有关系吗?
【问题讨论】:
-
A
std::vector<T>需要T提供正确的复制构造函数,如 reference documentation 中所述。 -
@πάνταῥεῖ C++11 放宽了要求
标签: c++ vector copy-constructor