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

 C++ Discussion :

Parcourir un set


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 109
    Par défaut Parcourir un set
    Salut à tous,

    j'ai un problème de parcours dans un set :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Operateur ZoneRepos::getOperateurQualifie(Qualification q)
    {
        set<Operateur>::iterator it = this->operateurs.begin() ;
        for (it ; it != this->operateurs.end() ; it ++)
        {
            if(it->isQualifie(q)) return *it ;
        }
        return NULL ;
    }
    la methode d'Operateur concernée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    bool Operateur::isQualifie(Qualification q)
    {
        list<Qualification>::iterator it = this->qualifications.begin() ;
        for (it; it != this->qualifications.end() ; it ++)
        {
            if (*it == q) return true ;
            return false ;
        }
    }
    Et voici mon erreur qui est sensé être sur cette ligne :
    if(it->isQualifie(q)) return *it ;

    |error: passing 'const Operateur' as 'this' argument of 'bool Operateur::isQualifie(Qualification)' discards qualifiers

    Si vous avez la solution.
    Merci d'avance

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    J'ai l'impression que le code que tu nous montres n'est pas tout à fait le vrai code.

    Je me demande si certaines fonctions ne sont pas const et que tu as oublié de nous le dire.

    d'autre part, et tu sûr que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    bool Operateur::isQualifie(Qualification q)
    {
        list<Qualification>::iterator it = this->qualifications.begin() ;
        for (it; it != this->qualifications.end() ; it ++)
        {
            if (*it == q) return true ;
            return false ;
        }
    }
    est correct, cela ne serait pas plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    bool Operateur::isQualifie(Qualification q)
    {
        list<Qualification>::iterator it = this->qualifications.begin() ;
        for (it; it != this->qualifications.end() ; it ++)
        {
            if (*it == q) return true ;
        }
        return false ;
      }
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 109
    Par défaut
    Effectivement le return false a rien a faire là, merci bien de l'avoir vu.

    Concernant mon erreur on m'a indique que l'opérateur '->' renvoie une référence constante, hors ma méthode isQualifie ne l'est pas. J'ai fais la modif et effectivement ca fonctionne. Ducoup je dois utiliser un cont_iterator.

    Merci bien pour le return

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par Knarf64 Voir le message
    Concernant mon erreur on m'a indique que l'opérateur '->' renvoie une référence constante
    changer la valeur d'un élément peut changer le set ce qui pourrait invalider l'itérateur et rendre la chose très complexe à gérer. D'où ce comportement.

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut à toi,
    Comme ram, j'ai l'impression qu'il manque des const non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Operateur ZoneRepos::getOperateurQualifie(Qualification q)const
    bool Operateur::isQualifie(Qualification q)const

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 109
    Par défaut
    Effectivement c'était cela.
    Dites moi tant que j'y suis , j'aimerais utiliser une structure sans doublon et sans ordre, vous pourriez m'en indiquer une ?

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Tu peux utiliser std::unordered_set ou std::unordered_map si tu as un compilateur C++0x ou implémentant la TR1. Ou alors avec Boost.Unordered
    Au lieu d'utiliser un ordre, ils utilisent une fonction de hachage.

  8. #8
    Membre confirmé
    Inscrit en
    Octobre 2009
    Messages
    109
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 109
    Par défaut
    Je vais tester du unordered::set

    Cela dit , comment se fait il que sur Cplusplus je ne trouve pas de doc associé a cette structure ? j'ai pu trouver que cela en marge des explications sur set.

    Elements follow a strict weak ordering at all times. Unordered associative arrays, like unordered_set, are available in implementations following TR1.

    merci bien

  9. #9
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par Knarf64 Voir le message
    Cela dit , comment se fait il que sur Cplusplus je ne trouve pas de doc associé a cette structure ?
    Les conteneurs unordered ne font pas parti de la normalisation du C++ 98/03. Ils sont présents dans TR1 ou dans la prochaine normalisation C++0x. J'imagine que c'est pour cela que Cplusplus n'en parle pas encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. set term ^
    Par tux dans le forum Débuter
    Réponses: 8
    Dernier message: 12/10/2004, 20h42
  2. Query data set
    Par Sandra dans le forum JBuilder
    Réponses: 3
    Dernier message: 20/01/2003, 10h08
  3. Comment cree une boite de dialogue parcourir
    Par kenshi dans le forum MFC
    Réponses: 5
    Dernier message: 06/01/2003, 10h30
  4. [VB6] [MDI] Parcourir toutes les MDIForms chargées
    Par d.carail dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 04/10/2002, 09h07
  5. character set // Nls_lang
    Par fopicht dans le forum Oracle
    Réponses: 2
    Dernier message: 23/05/2002, 12h04

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