Conversion de type de donnee

romca Messages postés 48 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 avril 2010 - 21 juil. 2005 à 18:16
romca Messages postés 48 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 avril 2010 - 21 juil. 2005 à 23:05
Voilà, je n'arrive pas a compilé une unité (energie.cpp) sous Borland Builder 6. Le debugger m'indique plusieurs erreurs de "symbole non defini" sur 2 variables dans un méthode, pourtant j'ai bien déclaré les variables auparavant et j'ai pas d'erreurs de syntaxe.
Je pense que c'est du a ce que dans les expressions, 2 types de donnees sont utilisees, "float" et "int". Est cela le pbm? Si oui comment pourrais je faire pour le regler en convertissant le type de variable. Voici le prog .
Il y a deux fiches "energie.h"(Declaration de la classe) et energie.cpp(les methodes). J'ai mis en rouge les lignes de codes ou il y a une erreur. Merci a vous.

//--------------------Déclaration de classe Energie------------------------------------------------------
#ifndef EnergieH
#define EnergieH
//--------------------------------------------------------------------------


#include "coeur.h"


//---------------------------------------------------------------------------
const int MaxDispo=1000;
const int apportMaxPulse=150;
const int puissFVitales=100;


const int limStresser=30; // Joules non consommées
const int limCalmer=60;


const int pourcentStresser=-10; //actions de regulation
const int pourcentCalmer=2;


const float rendementMuscles=0.5;


//--------------------------------------------------------


class coeur; //declaration incomplete.
//On est oblige car il existe un pointeur
//de la classe Energie vers la classe coeur (monCeour). Donc on est
//obligé de declarer la classe coeur avant la classe energie


class Energie
{
private:
coeur *monCoeur; //Pointeur sur la classeCoeur
int dispo; //Joules.Energie immediatemment dispo
int PuissanceDemandee; //Watts
int PuisssanceFournie; //Watts


public:
__fastcall Energie(coeur*); // ?
void __fastcall majPuissanceDemandee(int puiss);
int __fastcall lectPuissanceFournie();
void apportPulse(int duree);
};

//------------------Methodes de Energie-----------------------------------------------


#endif
#pragma hdrstop
#include //Pour fonction "cout "


#include "Energie.h"


#pragma package(smart_init)


//-----------Constructeur Energie-----------------------------------------


__fastcall Energie::Energie(coeur* pc)
{
monCoeur=pc;
dispo=MaxDispo;
PuissanceDemandee=0; //Watts
PuisssanceFournie=0;

}


//---------Methode majPuissanceDemandee--------------------------------------


void __fastcall Energie::majPuissanceDemandee(int puiss)
{
PuissanceDemandee=puiss;
}


//-------------Methode apportPulse--------------------------------------------


void __fastcall apportPulse(float duree)
{
int surplusApport;

//retrait de la consommation durant la duree (en ms)


dispo=dispo-(duree*puissFVitales); //erreur 2451 symbole "dispo" non defini
//J'ai essayé avec dispo=dispo-(duree*(float)puissFVitales) mais idem. "duree" est une variable de type float.

if (dispo>(duree*PuissanceDemandee)/rendementMuscles)erreur 2451 symbole "PuissanceDemandee" non defini

{
//On dispose de suffisamment d'energie
dispo=dispo-(duree*PuissanceDemandee/rendementMuscles);
PuissanceFournie=PuissanceDemandee;////Symbole PuissanceFournie non defini
}
else
{
//On ne dispose pas de suffisamment d'energie
PuissanceFournie=dispo*rendementMuscles/duree;
dispo=0;
}


//Ajout de l'energie apportee dans la limite de maxDispo


if((dispo+apportMaxPulse)<MaxDispo)
{
dispo=dispo+apportMaxPulse;
surplusApport=0;
}
else
{
dispo=MaxDispo;
surplusApport=dispo+apportMaxPulse-MaxDispo;
}


//Regulation


if(surplusApport<limStresser) monCoeur->MajTempo(pourcentStresser);//Symbole monCoeur non defini
if(surplusApport>limCalmer) monCoeur->MajTempo(pourcentCalmer);


//Ecriture temporaire


cout<<"Puissance Fournie: "<


}

3 réponses

D1m3x Messages postés 402 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 21 juillet 2005 1
21 juil. 2005 à 19:10
Salut,

le problème vient tout simplement parce que tu implémentes mal la fonction apportPulse ...



apportPulse étant déclaré dans la classe Energie, mais lors de l'implémentation tu ne le spécifie pas ! :

void __fastcall apportPulse( float duree )

{



Doit être remplacer par:

void __fastcall Energie::apportPulse( float duree )

{

// ...

}



Etant donné que dispo est déclaré dans Energie et que tu n'as pas
spécifié la class Energie c'est normal que le compilateur ne connaisse
pas dispo vu qu'il ne cherche pas dans espace de déclaration de la
classe :)

:.: [DmXx] [[irc://irc.quakenet.org/ex-concept #eX-Concept @ QNet]] :.:
0
romca Messages postés 48 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 avril 2010
21 juil. 2005 à 19:31
Ok merci beaucoup j'ai vu, je suis resté 1 heure la dessus...J'ai même pas vu.......je me suis obstiné sur les variables...vraiment degouté!
Par contre etant donne que la variable "duree" est de type "float" et que la variable dispo est de type "int", comment est ce possible de faire des calculs avec 2 types differents de variables sans les convertir?
Il me reste l'erreur de compil à la ligne PuissanceFournie=PuissanceDemandee;////Symbole PuissanceFournie non defini.
J'ai cherché..je vois encore pas?
Aurais tu une idée?
Merci.
0
romca Messages postés 48 Date d'inscription mercredi 26 janvier 2005 Statut Membre Dernière intervention 19 avril 2010
21 juil. 2005 à 23:05
Encore désolé, j'ai mis 3 "s" dans la déclaration de "PuissanceFournie".
Merci.
A+
0
Rejoignez-nous