Russian Qt Forum
Ноябрь 22, 2024, 11:39 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Перегрузка функций  (Прочитано 3046 раз)
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;
  • Почему это не работает?
  • Как можно исправит проблему?
« Последнее редактирование: Август 12, 2018, 16:33 от Xenom » Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Август 12, 2018, 17:07 »

патамушта объект никантантный.

обычна делают методу constBegin/cbegin который есть только константный
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #2 : Август 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();
 
Записан
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #3 : Август 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;
  • Почему это не работает?
  • Как можно исправит проблему?


написать преобразование из обычного итератора в константный
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.309 секунд. Запросов: 22.