Script conversion duree

Résolu/Fermé
godLike Messages postés 259 Date d'inscription mercredi 4 mars 2009 Statut Membre Dernière intervention 26 juillet 2011 - 31 oct. 2009 à 01:20
 pacorabanix - 31 oct. 2009 à 14:51
Bonjour,
Voilà j'ai commencer un petit script en C++ sur Visual C++ 2005 qui demande à l'utilisateur de rentrer une durée en nombre de seconde. Ce script permet de convertir la durée entrée en seconde et de la mettre en Hh:Mm:Ss.

Donc j'ai ce code :

// tp_duree.cpp : définit le point d'entrée pour l'application console.
//

#include "stdafx.h"
#include "iostream"
using namespace std;

struct TDuree
{
int nbSeconde;
int nbMinute;
int nbHeure;

void initialiser(int nbSec);
void initialiser(TDuree autreD);
void afficher();
int nbSecondes();
bool inferieurA(TDuree autreD);
bool operator<(TDuree autreD);
TDuree total(TDuree autreD);
TDuree operator+(TDuree autreD);
};

void TDuree::initialiser(int nbSec)
{
this->nbSeconde=(nbSec%60);
this->nbHeure=(nbSec/3600);
nbSec-=(this->nbSeconde)-(3600*this->nbHeure);
this->nbMinute=(nbSec/60);
}

int nbSecondes()
{
int nbSec;

return nbSec;
}

void TDuree::initialiser(TDuree autreD)
{
this->nbSeconde=d1.nbSeconde;
this->nbMinute=d1.nbMinute;
this->nbHeure=d1.nbHeure;
}

void TDuree::afficher()
{
cout<<"Nombre de seconde(s) :"<<this->nbSeconde<<endl;
cout<<"Nombre de minute(s) :"<<this->nbMinute<<endl;
cout<<"Nomnre d'heure(s) :"<<this->nbHeure<<endl;
}

int main()
{
int nbSec;
TDuree d1,autreD;

cout<<"Entrez une valeur en secondes"<<endl;
cin>>nbSec;

d1.initialiser(nbSec);
autreD.initialiser(d1);

d1.afficher();
autreD.afficher();


return 0;
}

Donc quand je l'execute, voici ma première erreur :

1>c:\users\matroska\documents\visual studio 2005\projects\tp_duree\tp_duree\tp_duree.cpp(41) : error C2065: 'd1' : identificateur non déclaré

cela correspond à la fonction

void TDuree::initialiser(TDuree autreD)
{
this->nbSeconde=d1.nbSeconde; // le d1 de cette ligne
this->nbMinute=d1.nbMinute;
this->nbHeure=d1.nbHeure;
}

donc j'ai essayé dans ma fonction de trafiquer des trucs mais en vain, je suis vraiment perdu :(

et voici les suivantes (qui je pensent vont être réglées si j'arrive à regler la 1ere) :

1>c:\users\matroska\documents\visual studio 2005\projects\tp_duree\tp_duree\tp_duree.cpp(41) : error C2228: la partie gauche de '.nbSeconde' doit avoir un class/struct/union
1> le type est ''unknown-type''
1>c:\users\matroska\documents\visual studio 2005\projects\tp_duree\tp_duree\tp_duree.cpp(42) : error C2228: la partie gauche de '.nbMinute' doit avoir un class/struct/union
1> le type est ''unknown-type''
1>c:\users\matroska\documents\visual studio 2005\projects\tp_duree\tp_duree\tp_duree.cpp(43) : error C2228: la partie gauche de '.nbHeure' doit avoir un class/struct/union
1> le type est ''unknown-type''




Merci par avance, cordialement.
A voir également:

2 réponses

pacorabanix
31 oct. 2009 à 01:41
bool inferieurA(TDuree autreD);
bool operator<(TDuree autreD);
TDuree total(TDuree autreD);

1) prends l'habitude de faire des class au lieu des struct, niveau conception objet (ce que fait piteusement struct) ce sera au final plus propre et clair. (Mais ce n'est pas le souci de ton prog)

2) lorsque tu fais de telles fonctions :
bool inferieurA(TDuree autreD);
bool operator<(TDuree autreD);
TDuree total(TDuree autreD);

il faut mieux passer en paramètres des "const TDuree&" au lieu des "TDuree". Sinon le programme fait une copie à chaque fois, ce qui peut être lourd (et sera problématique lorsque tu feras des class pour diverses raisons). Le "&" fait une référence au lieu d'une copie. le "const" c'est pour que ce soit plus propre, car en tu ne souhaites pas modifier les paramètres.


3) dans ce genre de fonction :

 int nbSecondes()
{
int nbSec;

return nbSec;
} 

tu fais une erreur de logique. Tu veux retourner la valeur de nbSec de ton "objet" ?
Là tu déclares une *nouvelle* variable nbSec locale à la fonction, et qui masque l'autre. De plus tu ne l'initialises pas, ce qui fait qu'au final cette fonction va retourner quelque chose de complètement imprévisible.


4) Pour ton problème : tu veux copier des choses d'une autre variable "autreD" mais dans ton code tu marques "d1." ...

5)utilises les balises < code > comme ça les espaces seront préservés ;) (pour la lecture)

voilà bonne soirée et bonne continuation
0
godLike Messages postés 259 Date d'inscription mercredi 4 mars 2009 Statut Membre Dernière intervention 26 juillet 2011 26
31 oct. 2009 à 09:52
Ok parce qu'en fait j'avais oublié un truc pour ça que j'avais void TDuree::initialiser(TDuree autreD)
Au lieu d'avoir void TDuree::initialiser(TDuree d1).
C'était ma mon main, j'avais oublié de corriger cette ligne:

autreD.initialiser(autreD);

donc là j'ai écrit

autreD.initialiser(d1);

et .. ça marche =)

merci bcp.
0
pacorabanix
31 oct. 2009 à 14:51
de rien ^^

autre petit détail : en théorie il faut faire #include <iostream> et pas "iostream". Ton compilateur le supporte apparemment, mais ce n'est pas très standard.
0