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 !
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 !
+1Envoyé par Miles
vu que le troisieme (celui la -> monBordereau->conteneurDest.insert(monBordereau->itDest, monBordereau->theDestinataire); ) ne marche pas
ben la il manque un argument à ton insert()... cf mon deuxieme lienBon en oubliant que la 3eme solution est fausse, pourquoi un simple pushback ou le insert(monBordereau->conteneurDest.end()) ne marche pas???
(Tu peux utiliser la balise code stp ?)Envoyé par SnakemaN
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 ?
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???
Va voir la:
http://c.developpez.com/faq/cpp/?page=surcharge
a non je ne voulais pas dire d'inserer le meme, c'etait une idéeEnvoyé par Eusebe
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)![]()
[Mode Troll]Ben passes sous FF alors !Envoyé par SnakemaN
[/Mode Troll]
le mieux c'est de faire un fichier operator.cpp par exEnvoyé par Eusebe
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; }
un const & serait quand même mieux...
aussi aussiEnvoyé par Miles
J'aimerai bien figures-toi mais c'est un PC d'entreprise (pas du tout d'informatique) alors....Envoyé par Eusebe
![]()
Alors là je sais pas pourquoi ca ne marche pas.
J'ai déclaré ma fonction de surcharge de l'opérateur << comme suit :
et j'obtiens cette erreur :
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; };
error C2804: binary 'operator <<' has too many parameters
J'aimerais bien comprendre ce qui ne lui plaît pas![]()
![]()
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 ?
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) {...}
"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.
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*
Elle est déclarée où ta fonction ?
Je la déclare dans le .h de ma classe Destinataire
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![]()
Voila la déclaration de ma classe avec la surcharge :
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
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_
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)
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.
Partager