Probleme STL map iterator

Résolu
RV2931
Messages postés
185
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
16 juillet 2016
- 21 juil. 2008 à 15:51
RV2931
Messages postés
185
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
16 juillet 2016
- 21 juil. 2008 à 16:26
Bonjour,

j'ai un petit problème avec l'utilisation des map et iterateur, voici grosso modo mon problème :

std::map<std::string,std::string> Map;
std::map::iterator it;

for(it = Map.begin();it != Map.end();it++)
{
     cout<<(*it).first()<<" "<<(*it).second()<<endl;
}

Le code me paraît bon, (sauf erreur de frappe), mais Visual Studio ne semble déjà pas trouver le type de it. Intellisense ne trouve aucune information, donc pas de complétion auto, et ça déjà, c'est chiant. Y a-t-il un truc a faire pour que Visual studio/intellisense reconnaisse les STL ??? ça me paraît bizarre.
 Et voici les erreurs qu'il me sort, je ne comprend pas trop...

error C2228: la partie gauche de '.second' doit avoir un type class/struct/union le type est 'std::_Tree<_Traits>::iterator::reference'
error C2228: la partie gauche de '.first' doit avoir un type class/struct/union le type est 'std::_Tree<_Traits>::iterator::reference'
error C2262: 'it' : ne peut pas être détruit(e)
error C2512: 'std::_Tree<_Traits>::iterator' : aucun constructeur par défaut approprié disponible
error C2582: 'operator =' fonction non disponible dans 'std::_Tree<_Traits>::iterator'
error C2676: '++' : 'std::map<_Kty,_Ty>::mapped_type' binaire ne définit pas cet opérateur ou une conversion vers un type acceptable pour l'opérateur prédéfini
        with
        [
            _Kty=std::string,
            _Ty=std::string
        ]
error C2955: 'std::map' : l'utilisation d'un modèle de classe nécessite une liste d'arguments de modèle
error C2955: 'std::map' : l'utilisation d'un modèle de classe nécessite une liste d'arguments de modèle c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\map(149) : voir la déclaration de 'std::map'
error C3861: 'it': identificateur introuvable, même avec une recherche qui dépend de l'argument
error C3861: 'it': identificateur introuvable, même avec une recherche qui dépend de l'argument
error C3861: 'it': identificateur introuvable, même avec une recherche qui dépend de l'argument
error C3861: 'it': identificateur introuvable, même avec une recherche qui dépend de l'argument
error C3861: 'it': identificateur introuvable, même avec une recherche qui dépend de l'argument

J'ai essayer en mettent des (*it)-> à la place de (*it). mais idem...

Merci

RV

L'intelligence est la chose la mieux répartie chez l'homme, car quoi qu'il en soit pourvu, il a toujours l'impression d'en avoir assez. "Descartes"

2 réponses

RV2931
Messages postés
185
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
16 juillet 2016

21 juil. 2008 à 16:26
oups, , j'ai trouvé. Il faut repréciser les types pour l'itérateur aussi, c'est évident.... maintenant..

std::map<std::string,std::string> Map;
std::map</gras>::iterator it;

for(it = Map.begin();it != Map.end();it++)
{
     cout<<(*it).first()<<" "<<(*it).second()<<endl;
}

désolé
3
RV2931
Messages postés
185
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
16 juillet 2016

21 juil. 2008 à 15:56
Il y a biensur un
#include <map> au dessus...

L'intelligence est la chose la mieux répartie chez l'homme, car quoi qu'il en soit pourvu, il a toujours l'impression d'en avoir assez. "Descartes"
0