Не удается преобразовать этот указатель из const Class в Class

#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();
 

И это должно сработать (если у вас определен постоянный итератор).