Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > iterator в классе


Автор: segmentation_fault 8.6.2005, 06:26
Доброго времени суток
Хочу в своем классе сделать собственный iterator чтобы он работал как iterator любого контейнера. Вот код:
Код

class PА {
private:
  std::list<Interface> vars;
public:
  class iterator
  {
    private:
       std::list<Interface>::iterator lii;
    public:
      std::list<Interface>::iterator operator++() {return ++lii;}
      void operator=(std::list<Interface>::iterator lti) {lii=lti;}
      bool operator==(std::list<Interface>::iterator lti) const {return lii == lti;}
      bool operator!=(std::list<Interface>::iterator lti) const {return lii != lti;}
  };
  std::list<Interface>::iterator begin() {return vars.begin();}
  std::list<Interface>::iterator end(){return vars.end();}
 //другие функции
};


класс компилируется но при попытке использования
Код

  PA pure;
  PA::iterator pai;
  for(pai = pure.begin(); pai != pure.end(); ++pai) {
    if(pai->var().empty()) //и.т.д.


компилятор жалуется:
Цитата

91: error: base operand of -> has non-pointer type Assignment::PA::iterator

можно ли как нибудь убедить компилятор что мой iterator является указателем? Ну и прокомментируйте если не затруднит любые другие ошибки.

Автор: jorkug 8.6.2005, 06:29
Можно перезагрузить оператор ->.

Автор: segmentation_fault 8.6.2005, 13:55
jorkug спасибо, это оказалось гораздо проще чем я думал. Всё скомпилировалось без проблем.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)