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 :

Problème de vector


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Sachiel31
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 121
    Par défaut Problème de vector
    Bonjour,

    J'ai créé une classe Bordereau qui contient plusieurs objets de types Destinataire, donc un vectior<Destinataire>.

    Mon problème est que j'arrive à remplir le 1er élément du vecteur avec un destinataire, mais pour les suivants cela ne marche pas.

    Déclaration de mon vecteur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    class Bordereau
    {
    private:
    	std::string date;
    	std::string devise;
    	std::string montantTotal;
     
    public:
    	std::vector<Destinataire> conteneurDest;
    	std::vector<Destinataire>::iterator itDest;
     
    	Destinataire theDestinataire;
     
    	Bordereau();
     
    	void afficheB();
    ...
    };
    Utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	monBordereau->theDestinataire.afficheD(n);
    	monBordereau->conteneurDest.insert(monBordereau->conteneurDest.end(), monBordereau->theDestinataire);
    	monBordereau->conteneurDest.push_back(monBordereau->theDestinataire);
    	monBordereau->conteneurDest.insert(monBordereau->itDest, monBordereau->theDestinataire);
    	monBordereau->itDest = monBordereau->conteneurDest.end();
    Je pense avoir essayer plein de solutions mais je bloque

    Merci de votre aide

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Et c'est quoi l'erreur ?

  3. #3
    Membre émérite
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Par défaut
    Et avec une boucle bien propre avec un iterator ? ca serait pas mieux ?

  4. #4
    Membre confirmé Avatar de Sachiel31
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 121
    Par défaut
    Comme je l'ai dit le premier destinataire est stocké dans le vecteur mais pas les suivants.

    Il me garde le contenu du premier élément mais change son adresse. C'est comme si le premier élément était supprimé (en copiant le contenu) et qu'un nouveau était créé avec le contenu de l'ancien.

    Voila le contenu de mon vecteur au premier passage :
    - monBordereau
    -> conteneurDest
    => _FIRST 0x003259e8 (avec tous les champs rensignés)
    => _LAST 0x003225a68 (vide)
    => _END 0x003225a68 (vide)
    -> itDest 0x003225a68

    Voila le contenu de mon vecteur au deuxieme passage :
    - monBordereau
    -> conteneurDest
    => _FIRST 0x00326448 (avec le contenu du 1er element)
    => _LAST 0x00326548 (vide)
    => _END 0x00326548 (vide)
    -> itDest 0x00326548


    Voila donc mon problème

  5. #5
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Bon, déjà le troisième est faux, ça vaut quoi après une insertion monBordereau->itDest ? ce n'est plus valide, donc à jeter !
    Combien t'affiche un size() du vecteur ?

  6. #6
    Membre émérite
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Par défaut
    Et pourquoi il t'affiche l'adresse du contenu et non pas le contenu ? c'est voulu ?

    et puis pourquoi tu n'incremente pas l'iterateur ? tu réecris sur le meme la

  7. #7
    Membre Expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Par défaut
    Si tu stoques directement l'objet, c'est normal que l'adresse change parce qu'il en fait une copie. Si tu ne le veux pas, je crois qu'il faut que tu stoques des pointeurs et non des objets.

    Sinon, tu fais comment pour parcourir ton vector ?

  8. #8
    Membre émérite
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Bidouille-tout Android

    Informations forums :
    Inscription : Juillet 2006
    Messages : 871
    Par défaut
    Citation Envoyé par Eusebe
    Si tu stoques directement l'objet, c'est normal que l'adresse change parce qu'il en fait une copie. Si tu ne le veux pas, je crois qu'il faut que tu stoques des pointeurs et non des objets.

    Sinon, tu fais comment pour parcourir ton vector ?
    Arf grilled

    je plussoie

  9. #9
    Membre confirmé Avatar de Sachiel31
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 121
    Par défaut
    Quand je fais un size() du vecteur il m'affiche 2.

    Le contenu est affiché à l'interieur du _FIRST.

    Mon iterateur est incrémenté puisqu'après l'ajout le lui donne l'adresse du dernier élément (monBordereau->itDest = monBordereau->conteneurDest.end(); )

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

Discussions similaires

  1. Problème redimensionnement vector
    Par Zacks dans le forum SL & STL
    Réponses: 2
    Dernier message: 19/06/2006, 15h18
  2. [Debutant][Vector]Petit problème de vector
    Par GyZmoO dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 25/05/2006, 10h39
  3. Problème avec vector par référence
    Par vdumont dans le forum SL & STL
    Réponses: 11
    Dernier message: 09/05/2006, 08h25
  4. Problème de vector
    Par jamesleouf dans le forum SL & STL
    Réponses: 13
    Dernier message: 22/03/2006, 22h36
  5. problème class vector
    Par Pe04 dans le forum SL & STL
    Réponses: 2
    Dernier message: 27/02/2006, 10h45

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