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 du Club
    Inscrit en
    Mars 2007
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 127
    Points : 54
    Points
    54
    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 chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 043
    Points : 2 234
    Points
    2 234
    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;
    Homer J. Simpson


  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
    Points : 3 156
    Points
    3 156
    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;
    }
    Find me on github

  4. #4
    Membre du Club
    Inscrit en
    Mars 2007
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 127
    Points : 54
    Points
    54
    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