Problème sur std::ostream has not been declared
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:
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:
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:
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 :
Citation:
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.