#c #reference #constants #copy-constructor
#c #ссылка #константы #копировать-конструктор
Вопрос:
Я пытаюсь реализовать простой конструктор копирования:
template<typename T>
MyClass<T>::MyClass(const MyClass<T> amp;other) {
MyIterator<T> it = other.begin();
//...
};
Эта единственная строка в теле функции-члена генерирует эту ошибку:
Не удается преобразовать этот указатель из const Class в Classamp;
Я пробовал что-то делать с const_cast, но ничего не вышло.
Комментарии:
1. Покажите нам myIterator, пожалуйста
2. Возможно, что myIterator пытается использовать неконстантный итератор
Ответ №1:
Ваш begin
метод, по-видимому, не является const, и все же вы пытаетесь вызвать его для объекта const.
Комментарии:
1. Спасибо. Это была ошибка. Я думал, что ключевое слово const должно быть помещено в конец объявления конструктора.
2. Конструктор не может быть
const
, поскольку он создает объект, поэтому изменяет его.
Ответ №2:
И это действительно хорошо, что вы не можете этого сделать! Бывают редкие случаи, когда вам нужно использовать const_cast
, так что в целом, как здесь, это не то, что нужно делать.
other
является объектом, поэтому он должен возвращать постоянный итератор. const
begin()
Вместо
MyIterator<T> it = other.begin();
использовать
MyConstIterator<T> it = other.begin();
И это должно сработать (если у вас определен постоянный итератор).