Sto provando a convertire una classe iteratore Devo essere compatibile con stl in modo che possa essere utilizzata con gli algoritmi di stl. Nel seguente esempio semplice (e francamente inutile), che dovrebbe stampare i valori da 0 a 5 compreso, sto ottenendo i seguenti errori,Scrittura di iteratori compatibili con stl
ISO C++ vieta incrementando un puntatore di tipo 'Iterator (*)()'
e,
valida conversione da 'Iterator (*)()' a 'int'
che cosa sto facendo di sbagliato?
Grazie.
#include <iterator>
#include <algorithm>
#include <iostream>
class Iterator : public std::iterator<std::bidirectional_iterator_tag, int> {
public:
Iterator(int i = 0) : val(i) {
if(val<0 || val>5) throw;
}
bool operator==(Iterator const& rhs) const {
return (val==rhs.val);
}
bool operator!=(Iterator const& rhs) const {
return !(*this==rhs);
}
Iterator& operator++() {
if(val!=6)
++val;
return *this;
}
Iterator operator++(int) {
Iterator tmp (*this);
++(*this);
return tmp;
}
Iterator& operator--() {
if(val!=-1)
--val;
return *this;
}
Iterator operator--(int) {
Iterator tmp (*this);
--(*this);
return tmp;
}
int operator*() const {
if(val==-1 || val==6) throw;
return val;
}
private:
int val;
};
Iterator begin() {
return Iterator();
}
Iterator end() {
return ++Iterator(5);
}
void print(int i) {
std::cout << i << std::endl;
}
int main(int argc, char* argv[]) {
std::for_each(begin,end,print);
}
Si sta utilizzando questo per una classe contenitore personalizzata? – Alerty