2014-06-24 71 views
0

我想實現一個簡單的拷貝構造函數:無法從常量類<T>轉換這個指針類<T>&

template<typename T> 
MyClass<T>::MyClass(const MyClass<T> &other) { 
    MyIterator<T> it = other.begin(); 
    //... 
}; 

,在成員函數體內一行生成此錯誤:

Cannot convert this pointer from const Class to Class&

我嘗試了const_cast的東西,但沒有成功。

+0

向我們展示MyIterator,請 – nishantjr

+0

其可能MyIterator試圖使用非const迭代器 – nishantjr

回答

3

您的begin方法顯然是非常量,但您嘗試在一個const對象上調用它。

+0

謝謝。那是錯誤。我認爲const關鍵字必須放在構造函數聲明的末尾。 – Kami

+0

構造函數不能是'const',因爲它正在創建對象,所以修改它。 – Zsolt

0

這是一件非常好的事情,你不能這樣做!在極少數情況下,您需要使用const_cast,所以一般來說,就像這裏一樣,這不是正確的做法。

otherconst對象,所以它的begin()應該返回一個常量迭代器。取而代之的

MyIterator<T> it = other.begin(); 

使用

MyConstIterator<T> it = other.begin(); 

,它應該工作(如果你有常量迭代定義)。

相關問題