我需要为我的班级Immagine
制作一个复制构造函数:
Immagine::Immagine(Immagine& i)
{
...
}
很明显,当我试着打电话时,我有类似的东西:
error: invalid initialization of non-const reference of type ‘Immagine&’ from an rvalue of type ‘Immagine’
因为我会将其声明为:
Immagine::Immagine(const Immagine& i)
{
...
}
但是我不能这样做因为,为了对一个Immagine成员对象进行初始化,我使用了一个函数
Immagine::Immagine(const Immagine& i)
{
dlib::array2d<dlib::rgb_pixel>& r=i.v; //v is a member of type dlib::array2d<dlib::rgb_pixel>
dlib::assign_image(this->dlib_immagine,r);
}
函数dlib::assign_image(dst,src)
是一个包函数,并将src
复制到dst
,但在const
参数处声明没有src
,所以如果我声明{{ 1}}作为i
我收到错误...我该如何解决这个问题?
答案 0 :(得分:5)
假设您无法更改dlib::assign_image()
以获取const Immagine
,并且您确定它实际上不会更改任何内容,那么我会使用const_cast删除来自i
的常量。
一般情况下,如果您有其他选项,最好不要使用const_cast
,但最好在调用遗留代码时使用IMO const_cast
,但代码不是正确的。但是您的代码是。