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 :

Iterator d'une liste - get qui marche pas


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 60
    Points : 34
    Points
    34
    Par défaut Iterator d'une liste - get qui marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for (list<Ue>::iterator it1 = modele1.get_instancesUe().begin(); it1 != modele1.get_instancesUe().end(); ++it1)
    {
    }
    voilà j'ai une belle erreur (Incompatible list iterator) qui apparaît quand j'exécute mon code quand je récupère ma liste de matière avec get_instanceUe().
    par contre cela marche si je mets mon "instancesUe" en public et que j'y accède comme ci dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    for (list<Ue>::iterator it2 = modele2.instancesUe.begin(); it2 != modele2.instancesUe.end(); ++it2)
    {
    }
    voici l'implémentation de ma méthode get_instancesUe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	list<Ue> Modele::get_instancesUe(void)const{
    		return this->instancesUe;};
    	void Modele::set_instancesUe(Ue ue){
    		this->instancesUe.push_back(ue);};
    Avez-vous déjà eu ce problème?

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tu renvoies une nouvelle copie de ta liste à chaque appel à get_instancesUe. Il faut renvoyer une référence (constante).

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 60
    Points : 34
    Points
    34
    Par défaut
    oui exact en renvoyant une référence ça doit marcher mais ma fonction "get_instancesUe" ne peut plus être const pour que je puisse renvoyer une référence et du coup dans ma classe Modèle,j'ai redéfini l'opérateur == et il veut pas que je fasse par exemple:
    instancesUe == modele.get_instancesUe()
    car get_instancesUe n'est plus const (enfin je pense que c'est pour ça qu'il me met une erreur)

    voici l'erreur au niveau de "instancesUe == modele.get_instancesUe() ": impossible de convertir un pointeur 'this' de 'const Modele' en 'Modele &'

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 60
    Points : 34
    Points
    34
    Par défaut
    bon j'ai rajouté const devant ma fonction et ça compile:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    list<Ue> const& Modele::get_instancesUe(void)const{
    		return instancesUe;};
    mais maintenant c'est avec mon iterator il met comme message:
    error C2440: 'initialisation' : impossible de convertir de 'std::list<_Ty>::_Const_iterator<_Secure_validation>' en 'std::list<_Ty>::_Iterator<_Secure_validation>'

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 60
    Points : 34
    Points
    34
    Par défaut
    il faut utiliser un const_iterator !

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 28/08/2010, 09h44
  2. [A-03] Rowsource d'une zone de liste que ne marche pas
    Par Marc_27 dans le forum VBA Access
    Réponses: 4
    Dernier message: 06/03/2009, 14h23
  3. Réponses: 1
    Dernier message: 12/01/2009, 22h00
  4. Une touche du clavier qui marche pas.
    Par Ubiquité dans le forum Linux
    Réponses: 2
    Dernier message: 25/12/2007, 11h24
  5. une comparaison qui marche pas.
    Par gandf dans le forum C++Builder
    Réponses: 7
    Dernier message: 16/02/2004, 15h59

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