Название: Перегрузка функций
Отправлено: Xenom от Август 12, 2018, 16:26
// list.h template<typename T> class List<T> { public: class iterator; class const_iterator;
iterator begin(); const_iterator begin() const;
class iterator { public: void operator =(const iterator& ); void operator =(const const_iterator& ); }; class const_iterator { public: void operator =(const iterator& ); void operator =(const const_iterator& ); }; };
//main.cpp #include "list.h"
List<int> list; List<int>::const_iterator it = list.begin(); //err: no viable convertion from List<T>::iterator to List<T>::const_iterator;
- Почему это не работает?
- Как можно исправит проблему?
Название: Re: Перегрузка функций
Отправлено: Авварон от Август 12, 2018, 17:07
патамушта объект никантантный.
обычна делают методу constBegin/cbegin который есть только константный
Название: Re: Перегрузка функций
Отправлено: __Heaven__ от Август 13, 2018, 09:23
Можно определить конструктор List<T>::const_iterator от List<T>::iterator и должно заработать. Сейчас компиль не понимает, как ему преобразовать const_iterator в iterator. Ещё можно при текущей реализации попробовать отдельно создать объект const_iterator, затем ему присвоить iterator. C++ (Qt) List<int> list; List<int>::const_iterator it; it = list.begin();
Название: Re: Перегрузка функций
Отправлено: _Bers от Август 13, 2018, 13:14
// list.h template<typename T> class List<T> { public: class iterator; class const_iterator;
iterator begin(); const_iterator begin() const;
class iterator { public: void operator =(const iterator& ); void operator =(const const_iterator& ); }; class const_iterator { public: void operator =(const iterator& ); void operator =(const const_iterator& ); }; };
//main.cpp #include "list.h"
List<int> list; List<int>::const_iterator it = list.begin(); //err: no viable convertion from List<T>::iterator to List<T>::const_iterator;
- Почему это не работает?
- Как можно исправит проблему?
написать преобразование из обычного итератора в константный
|