IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SL & STL C++ Discussion :

erreur avec iterator find


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Par défaut erreur avec iterator find


    J'ai une erreur avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    vector<pair<int,int> >::const_iterator it_pair;  
    
    for(it_pair=pair_object.begin();it_pair!=pair_object.end();it_pair++)
       {
        const std::pair<int,int> pair_ba = make_pair(it_pair->second,it_pair->first);
        vector<pair<int,int> >::const_iterator cpy_it_pair = it_pair;
    
        vector<pair<int,int> >::const_iterator it_find =
                find(cpy_it_pair,pair_object.end(),pair_ba);
       }
    L'erreur est :
    error C2782: '_II __cdecl std::find(_II,_II,const _Ty &)' : template parameter '_II' is ambiguous
    could be 'struct std::pair<int,int> *'
    or 'const struct std::pair<int,int> *'

    Je ne comprend pas pourquoi quand je passe buttonholes.begin() à find ça marche et que ça ne marche pas avec cpy_it_pair qui est du même type.

    J'ai essayer avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    vector<pair<int,int> >::const_iterator it_pair; 
    
    for(it_pair=pair_object.begin();it_pair!=pair_object.end();it_pair++)
       {
        const std::pair<int,int> pair_ba = make_pair(it_pair->second,it_pair->first);
        const vector<pair<int,int> >::const_iterator 
    
    cpy_it_pair = it_pair;
        vector<pair<int,int> >::const_iterator it_find =
                find(cpy_it_pair,pair_object,pair_ba);
       }
    Et j'ai le même message.
    Quelqu'un a une idée ?

    Merci de votre aide

  2. #2
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Par défaut
    Cela fonctionne si j'utilise un iterateur non const pour parcourir mon vector ET de ma copie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    vector<pair<int,int> >::iterator it_pair;  
    
    for(it_pair=pair_object.begin();it_pair!=pair_object.end();it_pair++)
       {
        const std::pair<int,int> pair_ba = make_pair(it_pair->second,it_pair->first);
        vector<pair<int,int> >::iterator cpy_it_pair = it_pair;
    
        vector<pair<int,int> >::const_iterator it_find =
                find(cpy_it_pair,pair_object.end(),pair_ba);
       }
    Mais je ne comprend pas pourquoi je ne peux réaliser la même opération sur des const_iterator. Je ne modifie pas la valeur de mon pointeur pourtant.

  3. #3
    screetch
    Invité(e)
    Par défaut
    le probleme c'est que begin() et end() renvoient un iterator, et toi tu remplaces un iterator par un const_iterator, donc cela donne un find appelé avec un const_iterator et un iterator, le compilateur ne sait pas quoi faire.

  4. #4
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Par défaut
    Ok. Tu as raison la solution est soit de passer 2 iterateur non-const :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    vector<pair<int,int> >::iterator it_pair;  
    
    for(it_pair=pair_object.begin();it_pair!=pair_object.end();it_pair++)
       {
        const std::pair<int,int> pair_ba = make_pair(it_pair->second,it_pair->first);
        vector<pair<int,int> >::iterator cpy_it_pair  = it_pair;
    
        vector<pair<int,int> >::const_iterator it_find =
                find(cpy_it_pair,pair_object.end(),pair_ba);
       }
    Ou deux iterateur const :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    vector<pair<int,int> >::const_iterator it_pair;  
    vector<pair<int,int> >::const_iterator it_end = pair_object.end();  
    
    for(it_pair=pair_object.begin();it_pair!=pair_object.end();it_pair++)
       {
        const std::pair<int,int> pair_ba = make_pair(it_pair->second,it_pair->first);
        vector<pair<int,int> >::const_terator cpy_it_pair  = it_pair;
    
        vector<pair<int,int> >::const_iterator it_find =
                find(cpy_it_pair,it_end,pair_ba);
       }
    Merci

    Une question toute fois je ne vois pas pourquoi il est nécessaire d'avoir mon iterator de parcours en nnon-const dans le premier cas.
    Il n'intervient pas directement dans le find. Ou alors est t il possible de caster un const_iterator en iterator de manière correcte ?

Discussions similaires

  1. Réponses: 11
    Dernier message: 09/07/2010, 17h44
  2. [XL-2003] Renvoi d'erreur avec .Find
    Par ADbtr dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/06/2010, 19h34
  3. erreur avec la methode find
    Par dalidali86 dans le forum JSF
    Réponses: 1
    Dernier message: 09/09/2009, 23h42
  4. Erreur avec le fonction "Find"
    Par tribaleur dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/06/2009, 11h48
  5. Gestion d'erreur avec find.
    Par drakkar_agfa dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/09/2008, 15h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo