Je viens de te donner la réponse à ta première erreur :roll:
Version imprimable
Je viens de te donner la réponse à ta première erreur :roll:
Tu as oublié un std:: devant le second ostream.
HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA !!!!!!!!!!!!!!
Ca a compilé nickel :yaisse2:
Me reste plus qu'à tester l'affichage de mon vector (j'ai quand meme fait tout ça pour y arriver)
Merciiiiiiiiiiiiiiiiiiiiiiiii :love:
Ouf !
Si ça fonctionne, n'oublies pas le bouton 'Résolu' ;)
Pas encore, ça, c'était pour voir ce qui ne marchait pas dans la première question ;)
Je vais pas vous lacher aussi facilement :P
L'affichage ne marche pas.
Je met tout au clair.
Voici bordereau.h :
c'est lui qui contient mon vector de Destinatire.
Voici ma fonction d'affichage :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 class Bordereau { private: std::string date; std::string devise; std::string montantTotal; public: std::vector<Destinataire> conteneurDest; std::vector<Destinataire>::iterator itDest; std::vector<Emetteur> conteneurEm; std::vector<Emetteur>::iterator itEm; Emetteur theEmetteur; Destinataire theDestinataire; Bordereau(); void afficheB(); const std::string get_date() const; void set_date(std::string value); const std::string get_devise() const; void set_devise(std::string value); const std::string get_montantTotal() const; void set_montantTotal(std::string value); void afficheConteneurDest(); friend std::ostream& operator<< (std::ostream &os, const Destinataire &dest); };
Et maintenant l'erreur obtenue sur le cout :Code:
1
2
3
4
5 void Bordereau::afficheConteneurDest(){ for(int i = 0; i < conteneurDest.size(); i ++){ cout << conteneurDest[i]; } }
Code:
1
2
3 Bordereau.cpp(6) : error C2678: binary '<<' : no operator defined which takes a left-hand operand of type 'class ostream_withassign' (or there is no acceptable conversion)
Le friend est inutile puisque tu utilises des accesseurs, quoiqu'en dise Poukill... - en plus ça aurait un sens si tu mettais ce friend dans la classe Destinataire, pas là ;) -
Tu inclus bien l'en-tête de ta fonction dans ton fichier cpp ? et l'en-tête iostream ?
Oui oui c'est bon.
Pourquoi iln'y a pas de std:: devant le premier endl de la premiere ligne du code de la surcharge ?
Et pourquoi l'opérateur << est toujours défini dans la classe Bordereau ?
Il est déclaré friend dans Boredereau, c'est tout, c'est ce que j'ai indiqué.
C'est quel compilateur ?
le "std::" c'es parceque je l'ai oublié et l'operateur n'est plus dans bordereau.h
parceque qu'elle veut le mettre en "friend" et qu'elle n'ecoute pô ce qu'on lui dit ! :lol: (j'deconne)
Alors le
friend std::ostream& operator<< (std::ostream &os, const Destinataire &dest);
est dedans (en public de preference)
ou
std::ostream& operator<< (std::ostream &os, const Destinataire &dest);
est APRES le }; de la classe
c'est pareil
J'utilise Visual C++ 6.0
et ça ne change rien que je mette la déclaration de mon operateur dans la classe (avec friend) ou endehors, ou carément pas du tout dans bordereau.h
j'ai toujours la meme erreur :
error C2678: binary '<<' : no operator defined which takes a left-hand operand of type 'class ostream_withassign' (or there is no acceptable conversion)
Probablement une question bête : dans le fichier cpp qui contiens ta fonction d'affichage, tu as bien un using namespace std; ?
en principe d'apres ce que j'ai vu elle rajoute std:: devant tout alors....:lol:Citation:
Envoyé par Eusebe
en plus afficheConteneurDest() est u methode donc le using namespace std devrait etre fait AVANT la declaration de la classe au cas ou on l'utilise..
[edit]: a ben voila il manque std::void afficheConteneurDest();
[edit2]: Sasa montre-nous les <include> que tu utilise dans Bordereau.h
Re [B]HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA !!!!!!!!!!!!![/B]
Tout marche nickel. J'ai rien changé mais c'est pas grave. C'est un miracle de l'informatique :mouarf:
L'affichage de mon vector marche et son remplissage aussi :king:
Je vous remercie tous beaucoup beaucoup, ce soir je vais enfin pouvoir dormir sans réver des erreurs de mon code. :merci:
Tu n'as rien changé ? Etonnant... :roll:
Mais bon, le principal c'est que ça fonctionne ;)
Bonne nuit alors !
De rien :D
bonne nuit (tu en a manifestement un peu besoin...:mouarf: )
a- C'est une certitude, il sera invalidé. Qui plus est, c'est une initialisation des plus étranges que je ne vois pas trop ce qu'elle peut faire. Avec un peu de chance, le container est vide, du coup on ne rentre pas dans la boucle et la mémoire n'est pas mise sans dessus-dessous.Citation:
Envoyé par Eusebe
b- Pour initialiser ? S'il n'y a pas un constructeur spécialisé pour cela, il y std::fill et std::fill_n
PS: <iostream> seulement là où l'on se sert de std::cout, std::cin, std::cerr ou std::clog. Il suffit de <iosfwd> pour les déclarations en avant dans les .h (où il n'y a pas de code, n'est-ce pas ? ^^) Et <istream>/<ostream> là on l'on définit du code qui a besoin des définitions des classes de flux.