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 :

Pointeur vers objet dans un vecteur


Sujet :

C++

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 134
    Par défaut Pointeur vers objet dans un vecteur
    Bonjour,

    j'aimerais utiliser un itérateur sur un vecteur (technique que je ne connais pas très bien) et j'ai un petit soucis à la compilation. Pourriez-vous m'aider ? Merci d'avance !

    Mon .h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class listLocalization {
     
    private:
        std::vector<localization> list;
     
    public:
        localization * getLocalization(std::string name);
    ...
    }
    Dans mon fichier .cpp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    localization * listLocalization::getLocalization(std::string name) {
     
        for(std::vector<localization>::iterator iter = list.begin(); iter!=list.end(); ++iter) {
    	// Si le nom de l'élément est égal à celui recherché, retourner l'objet localization
            if(!iter->getName().compare(name))
                return iter;
        }
        return NULL;
     
    }
    Le compilateur m'affiche une erreur que je n'arrive pas à comprendre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    In member function 'localization* listLocalization::getLocalization(std::string)':
    error: cannot convert 'std::vector<localization>::iterator {aka __gnu_cxx::__normal_iterator<localization*, std::vector<localization> >}' to 'localization*' in return
                 return iter;

  2. #2
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    Salut,

    Dans ton cas tu retournes un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::vector<localization>::iterator
    et non pas un , vois ton itérateur comme un conteneur de ton pointeur, donc tu doit de déréférencer.
    Essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(!iter->getName().compare(name))
                return *iter;

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Salut

    Astraya a raison : l'itérateur a la même sémantique que le pointeur pour le déréférencement, mais c'est tout : il ne te fournit pas de pointeur sur ton objet. Par contre, tu peux l'avoir avec une horrible chose comme:

    C'est moche mais ça fonctionne. Sinon, préfère la version C++11:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    localization * listLocalization::getLocalization(std::string name) {
        for(localization& element : list) {
    	// Si le nom de l'élément est égal à celui recherché, retourner l'objet localization
            if(element.getName() == name)
                return &element;
        }
        return null_ptr;
    }

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 134
    Par défaut
    Merci beaucoup pour votre réponse, j'ai compris !

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

Discussions similaires

  1. Récupération d'un objet dans un vecteur
    Par Madoka dans le forum Langage
    Réponses: 8
    Dernier message: 10/03/2009, 21h59
  2. Passage de tableau de pointeurs vers objets
    Par gnulix dans le forum C++
    Réponses: 5
    Dernier message: 14/04/2007, 19h41
  3. Réponses: 4
    Dernier message: 04/02/2007, 00h06
  4. Tri d'objets dans un vecteur
    Par Jahjouh dans le forum C++
    Réponses: 5
    Dernier message: 26/01/2006, 18h23
  5. destruction d'objets dans un vecteur
    Par titouille dans le forum C++
    Réponses: 12
    Dernier message: 28/07/2005, 19h20

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