2016-05-18 27 views
0

我需要一個拷貝構造函數我Immagine類是這樣的:C++:拷貝構造函數,使用功能與非const參數

Immagine::Immagine(Immagine& i) 
{ 
    ... 
} 

obviusly,當我嘗試調用它,我有這樣的事: error: invalid initialization of non-const reference of type ‘Immagine&’ from an rvalue of type ‘Immagine’,因爲我想聲明爲:

Immagine::Immagine(const Immagine& i) 
{ 
    ... 
} 

但我不能這樣做,因爲,到iniatialize的想象,成員對象,我用一個函數

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)是包功能,並複製到srcdstsrc參數聲明沒有const,所以如果我宣佈iconst我得到一個錯誤......我該如何解決這個問題?

+1

我沒有看到你用'i' ... – vu1p3n0x

+1

你在你的例子中插入了一個'... something ...'blackbox,這使得它不可能推斷出任何東西。我懷疑你在'assign_image'出現錯誤。 'r'已經是一個非const引用。 – luk32

+1

你確定嗎?他們的源代碼顯示'dlib :: assign_image()'接受一個const'src_img'參數。 http://dlib.net/dlib/image_transforms/assign_image_abstract.h.html#assign_image或者你是否使用一些舊版本 – vu1p3n0x

回答

5

假如你不能改變dlib::assign_image()採取const Immagine,並且要確保它實際上不會改變任何東西,那麼我會用const_casti去除常量性。

一般而言,如果您有其他選項,最好不要使用const_cast,但在調用不是常量正確但代碼不正確的遺留代碼時最好使用IMO const_cast

+0

const_cast似乎只是用指針工作... – volperossa

+1

@volperossa我還沒有嘗試過,但我認爲它也可以與引用一起工作。我可以看到它不能與實例一起工作(因爲這會導致對象複製)。 – Andy