Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

itérateur et iterator_traits

1 réponse
Avatar
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?

1 réponse

Avatar
Michael
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