2014-06-24 1 views
0

나는 간단한 복사 생성자를 구현하기 위해 노력하고 있습니다 :는 클래스에 const를 클래스 <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, please – nishantjr

+0

MyIterator가 비 const 반복기를 사용하려고 할 가능성이 있음 – nishantjr

답변

3

귀하의 begin 메서드는 분명히 const가 아니며 const 개체에서 호출하려고합니다.

+0

감사합니다. 그것은 오류였다. const 키워드는 생성자 선언의 끝에 넣어야한다고 생각했습니다. – Kami

+0

생성자는 객체를 생성 할 때'const' 일 수 없으므로 객체를 수정해야합니다. – Zsolt

0

그리고 정말 그렇게 할 수없는 일입니다! 당신이 const_cast을 사용할 필요가있는 드문 경우가 있기 때문에, 일반적으로, 여기에있는 것처럼, 적절한 행동이 아닙니다.

otherconst 개체이므로 begin()은 const 반복기를 반환해야합니다. 대신

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

사용

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

그리고 (당신이 CONST 반복자가 정의 된 경우) 작동한다의.

관련 문제