itérateur et iterator_traits

Le
Michael
Bonjour à tous,

je suis en train d'écrire un input iterator pour parcourir les données issues
d'une requête SQL sur une base de données.

J'en suis arrivé à ça:

class BDDIterator
{
private:
TADOQuery * SQL;
public:
BDDIterator(TADOQuery * SQL_ = NULL);
BDDIterator(const BDDIterator & ite);
~BDDIterator();

BDDIterator & operator=(const BDDIterator & ite);
bool operator==(const BDDIterator & ite) const;
bool operator!=(const BDDIterator & ite) const;

BDDIterator & operator++();
BDDIterator operator++(int);

BDDIterator & operator*();

TField * GetField(const AnsiString fieldName) const;
};

J'ai fait quelques tests avec quelques fonctions de <algorithms> et j'ai une
erreur que je n'arrive pas à résoudre.

//Marche nickel
BDD::BDDIterator ite = BDD->Begin();
for (ite; ite != BDD::BDDIterator(); ++ite)
Memo1->Lines->Add(ite.GetField("Nom")->AsString);

//Marche nickel
class t
{
private:
TMemo * Memo;
public:
t(TMemo * Memo_) : Memo(Memo_) {}
void operator()(const BDD::BDDIterator & ite)
{
Memo->Lines->Add(ite.GetField("Nom")->AsString);
}
};

std::for_each(BDD->Begin(),BDD->End(),t(Memo1));

//Ne marche pas
class f
{
private:
AnsiString matchName;
public:
f(const AnsiString & matchName_) : matchName(matchName_) {}

bool operator()(const BDD::BDDIterator & ite) const
{
return matchName == ite.GetField("Nom")->AsString;
}
};

BDD::BDDIterator ite = std::find_if(BDD->Begin(),BDD->End(),f("Belgique -
Ukraine"));
if (ite != BDD->End())
ShowMessage(ite.GetField("INdex_match")->AsString);

J'ai les messages d'erreurs suivants:

[C++ Error] stl/_iterator_base.h(94): E2404 Le qualificateur de type
dépendant 'BDDIterator' n'a aucun type membre nommé 'iterator_category'
[C++ Error] stl/_iterator_base.h(95): E2404 Le qualificateur de type
dépendant 'BDDIterator' n'a aucun type membre nommé 'value_type'
[C++ Error] stl/_iterator_base.h(96): E2404 Le qualificateur de type
dépendant 'BDDIterator' n'a aucun type membre nommé 'difference_type'
[C++ Error] stl/_iterator_base.h(97): E2404 Le qualificateur de type
dépendant 'BDDIterator' n'a aucun type membre nommé 'pointer'
[C++ Error] stl/_iterator_base.h(98): E2404 Le qualificateur de type
dépendant 'BDDIterator' n'a aucun type membre nommé 'reference'

Quelqu'un peut m'expliquer ce que j'ai (vraisemblablement) oublié de faire?
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Michael
Le #308314
Bon, eh bien je viens de trouver...

il fallait hériter BDDIterator de std::iterator, ce qui donne:

class BDDIterator : public std::iterator
<std::input_iterator_tag,void,void,void,void>
{
};

Désolé pour le post inutile ;)

@+

Mike
Publicité
Poster une réponse
Anonyme