我需要像这样为我的类 Immagine
创建一个复制构造函数:
Immagine::Immagine(Immagine& i)
{
...
}
显然,当我尝试调用它时,我有类似的东西: 错误:从“Immagine”类型的右值对“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);
}
function dlib::assign_image(dst,src)
是一个包函数,将 src
复制到 dst
但没有声明 const
在 src
参数,所以如果我将 i
声明为 const
我得到一个错误......我该如何解决这个问题?
假设您不能更改 dlib::assign_image()
以采用 const Immagine
,并且您确定它实际上不会更改任何内容,那么我会使用 const_cast从 i
中删除 const-ness。
一般来说,如果您有其他选择,最好不要使用 const_cast
,但是 IMO const_cast
最好在调用不正确的遗留代码时使用,但是你的代码是。
我是一名优秀的程序员,十分优秀!