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++

  1. #21
    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
    Ben écoute, tu me montres 2 insertions et à la fin le tableau est de taille 2, je ne vois pas où est le problème !

  2. #22
    Membre émérite
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 41
    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 Miles
    Ben écoute, tu me montres 2 insertions et à la fin le tableau est de taille 2, je ne vois pas où est le problème !
    +1
    vu que le troisieme (celui la -> monBordereau->conteneurDest.insert(monBordereau->itDest, monBordereau->theDestinataire); ) ne marche pas

    Bon en oubliant que la 3eme solution est fausse, pourquoi un simple pushback ou le insert(monBordereau->conteneurDest.end()) ne marche pas???
    ben la il manque un argument à ton insert()... cf mon deuxieme lien

  3. #23
    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
    Citation Envoyé par SnakemaN
    et en faisant un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for ( itDest=conteneurDest. begin ( ) ;
          itDest !=conteneurDest. end ( ) ;
          ++itDest ) {
        monBordereau->theDestinataire.afficheD(n); // tu affiches
        monBordereau->conteneurDest.insert(itDest, monBordereau->theDestinataire); //tu inseres
    }
    (Tu peux utiliser la balise code stp ?)
    Je ne pense pas que l'on puisse faire ça : l'itérateur ne doit plus être valide après l'insertion.
    Et en plus, je n'en vois pas l'intérêt : pourquoi insérer le même élément à tous les emplacements d'un vector ?

    Sachiel31, tu pourrais nous mettre ton code qui permet de regarder ce que contiens le vector ?

  4. #24
    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
    J'ai refais un test, apparement il prend bien en compte l'insertion d'un nouvel élément puisque la taille de mon vector s'incrémente à chaque fois.

    Le problème c'est que je n'arrive pas à afficher le contenu de mon vecteur. J'ai une erreur me disant que l'operateur "<<" n'est pas défini pour afficher des objets de types Destinataires.

    Comment on fait déja la surcharge de l'opérateur???

  5. #25
    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

  6. #26
    Membre émérite
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 41
    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
    (Tu peux utiliser la balise code stp ?)
    Je ne pense pas que l'on puisse faire ça : l'itérateur ne doit plus être valide après l'insertion.
    Et en plus, je n'en vois pas l'intérêt : pourquoi insérer le même élément à tous les emplacements d'un vector ?

    Sachiel31, tu pourrais nous mettre ton code qui permet de regarder ce que contiens le vector ?
    a non je ne voulais pas dire d'inserer le meme, c'etait une idée

    et puis la balise CODE je trouve qu'elle n'est pas pratique a cause des scrolling verticaux (surtout) ils sont un peu chiant on voit pas bien le code quand il y a peu de ligne (sous IE 6.0.2 en tout cas)

  7. #27
    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
    Citation Envoyé par SnakemaN
    (sous IE 6.0.2 en tout cas)
    [Mode Troll]Ben passes sous FF alors ! [/Mode Troll]

  8. #28
    Membre émérite
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 41
    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
    le mieux c'est de faire un fichier operator.cpp par ex
    avec en include ton destinataire.cpp

    et des surcharges comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ostream& operator << (ostream & os, destinataire &myDest)
    {
    os << ......
    return os;
    }
    
    istream& operator >> (ostream & is, destinataire &myDest)
    {
    //tu peux utiliser ds getline() c'est bien pratique
    return is;
    }

  9. #29
    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
    un const & serait quand même mieux...

  10. #30
    Membre émérite
    Avatar de SnakemaN
    Profil pro
    Bidouille-tout Android
    Inscrit en
    Juillet 2006
    Messages
    871
    Détails du profil
    Informations personnelles :
    Âge : 41
    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 Miles
    un const & serait quand même mieux...
    aussi aussi

    Citation Envoyé par Eusebe
    [Mode Troll]Ben passes sous FF alors ! [/Mode Troll]
    J'aimerai bien figures-toi mais c'est un PC d'entreprise (pas du tout d'informatique) alors....

  11. #31
    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
    Alors là je sais pas pourquoi ca ne marche pas.
    J'ai déclaré ma fonction de surcharge de l'opérateur << comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	ostream& operator<< (ostream &fluxSortie, const Destinataire &dest){
    		fluxSortie << dest.matricule << endl;
    		fluxSortie << dest.libelleCptD << std::endl;
    		fluxSortie << dest.nomBanqueD << std::endl;
    		fluxSortie << dest.codeGD << std::endl;
    		fluxSortie << dest.numCptD << std::endl;
    		fluxSortie << dest.paieNet << std::endl;
    		fluxSortie << dest.libelle << std::endl;
    		fluxSortie << dest.codeBD << std::endl;
     
    		return fluxSortie;
    	};
    et j'obtiens cette erreur :
    error C2804: binary 'operator <<' has too many parameters

    J'aimerais bien comprendre ce qui ne lui plaît pas

  12. #32
    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
    C'est une fonction libre, pas une fonction membre, operator<<, puisque le premier argument n'est pas ta classe, mais un flux. Tu as bien regardé la FAQ ?

  13. #33
    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
    Oui j'ai bien regardé. J'ai également trouvé d'autres exemples de cette surcharge et c'est écris de la meme façon.

    Le seul poitn qui diffère par moment, c'est que certains déclarent :
    friend ostream& opertor<<(ostream &fluxSortie, const Destinataire &dest) {...}

  14. #34
    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
    "friend", c'est dans la déclaration de la classe au cas où cette fonction non membre a besoin d'accéder aux variables privées de la classe. Dans le cas général, il n'y aucune allusion à cette fonction libre dans la classe.

  15. #35
    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
    Je sais bien mais pourquoi Visual me met une erreur sur la fonction opertor<<


    *ca craint si je me défoule sur le PC, c'est pas le mien *

  16. #36
    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
    Elle est déclarée où ta fonction ?

  17. #37
    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
    Je la déclare dans le .h de ma classe Destinataire

  18. #38
    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 elle est où par rapport à ta classe ? De plus, si le prototype que tu as donné est celuiq ue tu utilises, enlève le using namespace std dans ton fichier d'en-tête

  19. #39
    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
    Voila la déclaration de ma classe avec la surcharge :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    #ifndef _DESTINATAIRE_H_
    #define _DESTINATAIRE_H_
     
    #include <string>
    #include <iostream>
    #include <ostream>
     
     
    class Destinataire
    {
    private:
    	std::string matricule;
    	std::string libelleCptD;
    	std::string nomBanqueD;
    	std::string codeGD;
    	std::string numCptD;
    	std::string paieNet;
    	std::string libelle;
    	std::string codeBD;
     
    public:
    	Destinataire();
     
    	void afficheD(int n);
     
    	const std::string get_matricule() const;
    	void set_matricule(std::string value);
     
    	const std::string get_libelleCptD() const;
    	void set_libelleCptD(std::string value);
     
    	const std::string get_nomBanqueD() const;
    	void set_nomBanqueD(std::string value);
     
    	const std::string get_codeGD() const;
    	void set_codeGD(std::string value);
     
    	const std::string get_numCptD() const;
    	void set_numCptD(std::string value);
     
    	const std::string get_paieNet() const;
    	void set_paieNet(std::string value);
     
    	const std::string get_libelle() const;
    	void set_libelle(std::string value);
     
    	const std::string get_codeBD() const;
    	void set_codeBD(std::string value);
     
    	// surcharge de l'operateur <<
    	ostream& operator<< (ostream &os, const Destinataire &dest){
    		os << dest.matricule << endl;
    		os << dest.libelleCptD << std::endl;
    		os << dest.nomBanqueD << std::endl;
    		os << dest.codeGD << std::endl;
    		os << dest.numCptD << std::endl;
    		os << dest.paieNet << std::endl;
    		os << dest.libelle << std::endl;
    		os << dest.codeBD << std::endl;
     
    		return os;
    	};
    };
     
    #endif // _DESTINATAIRE_H_
    et les erreurs générées :
    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
    --------------------Configuration: Bordereau - Win32 Debug--------------------
    Compiling...
    Bordereau.cpp
    c:\...\bordereau\destinataire.h(63) : error C2804: binary 'operator <<' has too many parameters
    c:\...\bordereau\destinataire.h(63) : error C2333: '<<' : error in function declaration; skipping function body
    Destinataire.cpp
    c:\...\bordereau\destinataire.h(63) : error C2061: syntax error : identifier 'ostream'
    c:\...\bordereau\destinataire.h(63) : error C2805: binary 'operator <<' has too few parameters
    c:\...\bordereau\destinataire.h(63) : error C2333: '<<' : error in function declaration; skipping function body
    main.cpp
    c:\...\bordereau\destinataire.h(63) : error C2804: binary 'operator <<' has too many parameters
    c:\...\bordereau\destinataire.h(63) : error C2333: '<<' : error in function declaration; skipping function body
    Error executing cl.exe.
     
    Bordereau.exe - 7 error(s), 0 warning(s)

  20. #40
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par défaut
    L'opérateur doit être HORS de la classe.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ 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