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 !
Version imprimable
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 !
+1Citation:
Envoyé 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 lienCitation:
Bon 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 ?)Citation:
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 :faq: :
http://c.developpez.com/faq/cpp/?page=surcharge
a non je ne voulais pas dire d'inserer le meme, c'etait une idéeCitation:
Envoyé 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):roll:
[Mode Troll]Ben passes sous FF alors ! :P [/Mode Troll]Citation:
Envoyé par SnakemaN
le mieux c'est de faire un fichier operator.cpp par exCitation:
Envoyé par Eusebe
avec en include ton destinataire.cpp
et des surcharges comme :
Code:
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 aussiCitation:
Envoyé par Miles
J'aimerai bien figures-toi mais c'est un PC d'entreprise (pas du tout d'informatique) alors....:arf:Citation:
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:
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 :question: :!:
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<< :piou:
*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:
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:
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.