Я реализовал такой итератор
template <typename GridT,
typename GridPtr,
typename GridRef,
template <typename> class ShapeT>
class GridIterator
{
public:
typedef GridIterator<GridT, GridPtr, GridRef, ShapeT> Iterator;
// Iterator traits - typedefs and types required to be STL compliant
typedef std::ptrdiff_t difference_type;
typedef typename GridT::Element value_type;
typedef typename GridT::Element* pointer;
typedef typename GridT::Element& reference;
typedef size_t size_type;
typedef std::forward_iterator_tag iterator_category;
GridIterator(GridT& grid,
ShapeT<typename GridT::Resolution> shape,
Index iterStartIndex);
~GridIterator();
Iterator& operator++();
Iterator operator++(int);
typename GridT::Element& operator*();
typename GridT::Element* operator->();
bool operator==(const GridIterator& rhs) const;
bool operator!=(const GridIterator& rhs) const;
private:
GridT& grid_;
ShapeT<typename GridT::Resolution> shape_;
Index iterIndex_;
Index iterIndexEnd_;
};
Он отлично работает с std :: generate и std :: find, но когда я использую его с std :: max_element, я получаю его ошибку:
main.cpp: в функции 'int main (int, const char **)': main.cpp: 105: 16: ошибка: 'iter' не был объявлен в этой области В файле, включенном из /usr/include/c++/4.6 / алгоритм: 63: 0, из ./grid/Map_Grid.h:11, из main.cpp: 4: /usr/include/c++/4.6/bits/stl_algo.h: в функции '_FIter std :: max_element (_FIter , _FIter) [с _FIter = Map :: GridIterator, Map :: Grid *, Map :: Grid &, Map :: Rectangle>] ': main.cpp: 102: 53:
создается здесь / usr / include / c ++ / 4.6 / bits / stl_algo.h: 6243: 4: ошибка: использование удаленной функции 'Map :: GridIterator, Map :: Grid *, Map :: Grid &, Map :: Rectangle> & Map :: GridIterator, Map: : Grid *, Map :: Grid &, Map :: Rectangle> :: operator = (const Map :: GridIterator, Map :: Grid *, Map :: Grid &, Map :: Rectangle> &) 'В файле, включенном из ./ grid / Map_Grid.h: 8: 0, из main.cpp: 4: ./grid/Map_GridIterator.h:17:8: error: 'Map :: GridIterator, Map :: Grid *, Map :: Grid &, Map: : Прямоугольник> & Map :: GridIterator, Map :: Grid *, Map :: Grid &, Map :: Re ctangle> :: operator = (const Map :: GridIterator, Map :: Grid *, Map :: Grid &, Map :: Rectangle> &) 'неявно удаляется, потому что определение по умолчанию будет неправильно сформировано: ./grid/Map_GridIterator .h: 17: 8: error: нестатический ссылочный член 'Map :: Grid & Map :: GridIterator, Map :: Grid *, Map :: Grid &, Map :: Rectangle> :: grid_', нельзя использовать значение по умолчанию оператор присваивания
Есть идеи о том, что я делаю неправильно?