Bonjour à tous,
ayant effectué une recherche sur le forum et même sur internet mais n'ayant pas trouvé de réponse, je me tourne vers vous pour m'expliquer le problème.
Je suis un cours C++ et je bloque lors de l'implémentation de l'opérateur "<<" pour la classe durée.
Voici le code source:
Duree.h
Duree.cpp
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 #ifndef DEF_DUREE #define DEF_DUREE class Duree { public: Duree(int heures = 0, int minutes = 0, int secondes = 0); Duree& operator+=(Duree const& duree); Duree& operator-=(Duree const& duree); Duree& operator*=(int nombre); void afficher(std::ostream &out) const; private: int m_heures; int m_minutes; int m_secondes; int m_excedentMinutes; int m_excedentHeures; }; #endif Duree operator+(Duree const&a, Duree const& b); Duree operator-(Duree const&a, Duree const& b); Duree operator*(Duree const&a, int nombre); std::ostream& operator<<(std::ostream &out, Duree const& duree);
Main.cpp
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123 #include <iostream> #include <fstream> #include "Duree.h" using namespace std; Duree::Duree(int heures, int minutes, int secondes) : m_heures(heures), m_minutes(minutes), m_secondes(secondes) { if (secondes >= 60) { m_excedentMinutes = secondes/60; secondes = secondes % 60 ; minutes = minutes + m_excedentMinutes; } if (minutes >= 60) { m_excedentHeures = minutes/60; secondes = minutes % 60; heures = heures + m_excedentMinutes; } } Duree& Duree::operator+=(Duree const& duree2) { m_secondes = m_secondes + duree2.m_secondes; m_minutes = m_minutes + m_secondes/60; m_secondes = m_secondes % 60; m_minutes = m_minutes + duree2.m_minutes; m_heures = m_heures + m_minutes/60; m_minutes = m_minutes % 60; m_heures = m_heures + duree2.m_heures; return *this; } Duree& Duree::operator-=(Duree const& duree2) { int negSecondes(0); int negMinutes(0); m_secondes = m_secondes - duree2.m_secondes; if (m_secondes < 0) { negSecondes = m_secondes; m_secondes = 60 + m_secondes; } m_minutes = m_minutes - duree2.m_minutes; if (m_minutes < 0 and negSecondes < 0) { negMinutes = m_minutes; m_minutes = 59 + m_minutes; } else if (m_minutes < 0 and negSecondes == 0) { negMinutes = m_minutes; m_minutes = 60 + m_minutes; } if (negMinutes <0) { m_heures = m_heures - 1 - duree2.m_heures; } else { m_heures = m_heures - duree2.m_heures; } } Duree& Duree::operator*=(int nombre) { int secondesSup(0); int minutesSup(0); m_secondes = m_secondes * nombre; if (m_secondes >= 60) { secondesSup = m_secondes / 60; m_secondes = m_secondes %60; } m_minutes = m_minutes * nombre + secondesSup; if (m_minutes >= 60) { minutesSup = m_minutes / 60; m_minutes = m_minutes % 60; } m_heures = m_heures * nombre + minutesSup; } Duree operator+(Duree const&a, Duree const& b) { Duree copie(a); copie += b; return copie; } Duree operator-(Duree const&a, Duree const& b) { Duree copie(a); copie -= b; return copie; } Duree operator*(Duree const&a, int nombre) { Duree copie(a); copie *= nombre; return copie; } void Duree::afficher(ostream &out) const { out << m_heures << "h" << m_minutes << "m" << m_secondes <<"s"; } ostream& operator<<(ostream &out, Duree const& duree) { duree.afficher(out); return out; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #include "duree.h" #include <iostream> using namespace std; int main() { Duree duree1(1, 45, 40), duree2(1, 46, 50); Duree resultat; cout << duree1; return 0; }
Voici ses messages d'erreurs :
Le problème c'est que j'ai regardé la correction est elle est en tout point identique ? D'ou peut venir le problème ?C++\Duree\duree.h|11|error: 'std::ostream' has not been declared|
C++\Duree\duree.h|26|error: expected constructor, destructor, or type conversion before '&' token|
C++\Duree\main.cpp|11|error: no match for 'operator<<' in 'std::cout << duree1'|
Merci des réponses que vous m'apporterez.
Partager