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
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);
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
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;
}
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
#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 :

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'|
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 ?

Merci des réponses que vous m'apporterez.