OVH Cloud OVH Cloud

Warning dû à la STL

4 réponses
Avatar
Moah, full time turnip.
Bonjour,

Je suis en ce moment en train de programmer une application en Borland
C++ Builder, et sa compilation me génère des warnings que je ne sais pas
gérer.

"[C++ Avertissement] Unit1.cpp(585): W8091 Argument template, _InputIter
passé à 'for_each' est un itérateur output : itérateur input requis
Contexte d'analyseur complet
Unit1.cpp(574): analyse :, void TForm1::UpdateDBListBox()"

Le code qui génère cette erreur est le suivant:

{
multiset<DBCard, CardCompare> List;
for_each(List.begin(), List.end(), AddItem);
}

(en fait partout où j'utilise un for_each sur mon multiset)
Donc deux solution: je fais n'importe quoi et je ne m'en rends pas
compte (solution la plus probable) ou Borland fais n'importe quoi et
je ne peux rien (solution peu probable mais possible).
Le fait est que je ne comprends pas bien la différence entre un itéra-
teur d'entrée (input) et un itérateur de sortie (output), ni comment
passer de l'un à l'autre, ni dans quel cas utiliser quoi.

Merci de vos réponses,
Moah, full time turnip.

4 réponses

Avatar
Michaël Monerau
Moah, full time turnip. wrote:
Bonjour,

Je suis en ce moment en train de programmer une application en Borland
C++ Builder, et sa compilation me génère des warnings que je ne sais
pas gérer.

"[C++ Avertissement] Unit1.cpp(585): W8091 Argument template,
_InputIter passé à 'for_each' est un itérateur output : itérateur
input requis Contexte d'analyseur complet
Unit1.cpp(574): analyse :, void TForm1::UpdateDBListBox()"

Le code qui génère cette erreur est le suivant:

{
multiset<DBCard, CardCompare> List;
for_each(List.begin(), List.end(), AddItem);
}


Qu'est-ce que AddItem ? Un functor ? Précise un peu...
--
<=- Michaël "Cortex" Monerau -=>

Avatar
Moah, full time turnip.
Michaël Monerau wrote:

Qu'est-ce que AddItem ? Un functor ? Précise un peu...


Voici une implémentation minimaliste qui génère le warning sous Borland.

#include <algorithm>
#include <functional>
#include <set>

using std::multiset;
using std::for_each;

typedef int DBCard;
typedef std::less<DBCard> CardCompare;
void AddItem (DBCard) { }

int main ()
{
multiset<DBCard, CardCompare> List;
for_each(List.begin(), List.end(), AddItem);
}

Moah, full time turnip.

Avatar
Michaël Monerau
Moah, full time turnip. wrote:
Michaël Monerau wrote:

Qu'est-ce que AddItem ? Un functor ? Précise un peu...


Voici une implémentation minimaliste qui génère le warning sous
Borland.

#include <algorithm>
#include <functional>
#include <set>

using std::multiset;
using std::for_each;

typedef int DBCard;
typedef std::less<DBCard> CardCompare;
void AddItem (DBCard) { }

int main ()
{
multiset<DBCard, CardCompare> List;
for_each(List.begin(), List.end(), AddItem);
}


Je n'ai aucun problème avec ce code sur VC++ 7.1... Bizarre. Mais je ne
connais pas multiset, donc je ne peux pas trop t'aider...
Un for_each sur un vector marche bien sans warning ?
--
<=- Michaël "Cortex" Monerau -=>


Avatar
Moah, full time turnip.
Michaël Monerau wrote:

Je n'ai aucun problème avec ce code sur VC++ 7.1... Bizarre. Mais je ne
connais pas multiset, donc je ne peux pas trop t'aider...
Un for_each sur un vector marche bien sans warning ?


Cette version du code ne fournit aucun warning:

#include <algorithm>
#include <functional>
#include <set>

using std::vector;
using std::for_each;

typedef int DBCard;
typedef std::less<DBCard> CardCompare;
void AddItem (DBCard) { }

int main ()
{
vector<DBCard> List;
for_each(List.begin(), List.end(), AddItem);
}

Moah, full time turnip.