Russian Qt Forum

Программирование => С/C++ => Тема начата: Xenom от Август 12, 2018, 16:26



Название: Перегрузка функций
Отправлено: 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;
  • Почему это не работает?
  • Как можно исправит проблему?


написать преобразование из обычного итератора в константный