Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1361 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [c++builder] declaration, initialisation de variables "globales"

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c++builder] declaration, initialisation de variables "globales"

n°185345
farib
Posté le 29-07-2002 à 15:28:51  profilanswer
 

je reformule ma question
 
j'ai ma fiche  qui marche tres bien
 
j'ai deux classes , un "noyeau de calculette"

Code :
  1. class Calculette
  2. {
  3. public :
  4.         Calculette ();
  5.         ~Calculette ();
  6. void    Empiler (double Valeur);
  7. bool    Depiler (double &Valeur);
  8. AnsiString Afficher_Pile ();
  9. int     Taille_Pilef(){return Taille_Pile ;}
  10. bool    Additionner ();
  11. bool    Soustraire ();
  12. bool    Multiplier();
  13. bool    Diviser();
  14. bool    Negation();
  15. private:
  16.         Liste * Pile ;
  17.         int Taille_Pile;
  18. void    Calculette::Ajouter( double Valeur);
  19. void    Retirer ();
  20. }


 
elle est appelée par une autre classe qui fait le lien avec la fiche builder
 

Code :
  1. class Interface
  2. {
  3. public:
  4.         Interface ();
  5.         ~Interface();
  6. void            Touche (int Key_Pushed);
  7. AnsiString      Actualiser_Affichage_Pile();
  8. AnsiString      Actualiser_Affichage_EditBox();
  9. AnsiString      Lire_Description_Erreur();
  10. private:
  11. bool Virgule;
  12. Calculette * MaCalculette ;
  13. AnsiString EditBox ;
  14. AnsiString Description_Erreur ;
  15. void    Edition (int Key_Pushed);
  16. };


 
1ere question
ce que j'aimerais savoir c ou déclarer proprement ces classes, sachant ke seule la 2e est appelée par l'inteface (via Interface::Touche)
et qu'il faut juste qu'elle soit crée lors du lancement de l'application (où dois-je écrire

Code :
  1. Interface * MonInterface= new Interface (); // pour créer et initialiser ma calculette

)
 
 
2e question
comment faire pour  resortir et afficher proprement un résultat ?
dois-je integrer dans mes méthodes de classe Interface la modification de mes TStaticLabel (ce qu'ici j'utilise), ou dois-je le faire a l'extérieur de la classe (c eque je fais actuellement)


Message édité par farib le 29-07-2002 à 15:32:15
mood
Publicité
Posté le 29-07-2002 à 15:28:51  profilanswer
 

n°185370
antp
Super Administrateur
Champion des excuses bidons
Posté le 29-07-2002 à 15:46:00  profilanswer
 

1 -> je mettrais ça dans le constructeur (ou OnCreate) de la fenêtre si c'est une classe utilisée juste par la fenêtre, ou encore dans le fichier principal (du même nom que le projet) juste avant        Application->Run(); ou juste avant la création de la fenêtre.
Mais bon ça c'est ce que je fais en Delphi, j'imagine que ça marche pareil dans C++Builder
 
2 -> si tu veux garder une séparation entre d'un côté le code de la fenêtre et la gestion des éléments de cette fenêtre et de l'autre côté la gestion de la calculette, je ferais ceci:
un événement OnResult dans la classe Interface qui transmet une chaîne de caractère ou un nombre à afficher.  
relier cet évément à une fonction de la fenêtre qui saura mieux que toute autre classe ce qu'il faut en fair pour l'afficher.
 
je sais pas si c'est clair :crazy:


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°185413
farib
Posté le 29-07-2002 à 16:15:56  profilanswer
 

je suis intéressé par 2-
 
 
je réuploade mon code si t curieux pour me dire commetn faire
<joke>
j'ai découvert le plus gros bug mondial
 
la répartion du marché visual/builder n'est pas
 
visualc++ =  0.0000001 % (les gars de chez microsoft)
c++builder= 99.9999999 % reste du monde
</joke>
 
a l'école y'a visual, j'ai meme pas réussi a faire un truc aussi con que taper un texte dans une editbox, cliquer ok, et le texte apparait égalemetn dans un label
 
tandis qu'avec builder c LOGIQUE et SIMPLE !
 
franchemetn c pas logique ke les gens fassent du visual....
 
http://perso.wanadoo.fr/pentium75/builder

n°185417
antp
Super Administrateur
Champion des excuses bidons
Posté le 29-07-2002 à 16:17:35  profilanswer
 

:D
C'est ce que je me suis toujours dit.
Pour ce qui est du GUI Visual C++ 6 est à la traîne
Mais il paraît que le 7 a ratrappé son retard :o


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°185419
LetoII
Le dormeur doit se réveiller
Posté le 29-07-2002 à 16:18:59  profilanswer
 

farib a écrit a écrit :

je suis intéressé par 2-
 
 
je réuploade mon code si t curieux pour me dire commetn faire
<joke>
j'ai découvert le plus gros bug mondial
 
la répartion du marché visual/builder n'est pas
 
visualc++ =  0.0000001 % (les gars de chez microsoft)
c++builder= 99.9999999 % reste du monde
</joke>
 
a l'école y'a visual, j'ai meme pas réussi a faire un truc aussi con que taper un texte dans une editbox, cliquer ok, et le texte apparait égalemetn dans un label
 
tandis qu'avec builder c LOGIQUE et SIMPLE !
 
franchemetn c pas logique ke les gens fassent du visual....
 
http://perso.wanadoo.fr/pentium75/builder




 
Faut aussi voir que visual est pas cher par rapport à C++ builder...


---------------
Le Tyran
n°185422
antp
Super Administrateur
Champion des excuses bidons
Posté le 29-07-2002 à 16:19:31  profilanswer
 

C++Builder standard est à un peu plus de 100 ? :p
 
Ce n'est pas le prix du produit seul qui guide le choix des entreprises... mais plus le fait que ce soit Microsoft, et comme ils ont déjà Win+Office MS leur fait une reduc je suppose...
ou alors il regardent juste le prix du produit sans regarder les heures de boulot pour faire l'interface du soft :D


Message édité par antp le 29-07-2002 à 16:20:35

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°185427
farib
Posté le 29-07-2002 à 16:24:16  profilanswer
 

antp a écrit a écrit :

C++Builder standard est à un peu plus de 100 ? :p
 
Ce n'est pas le prix du produit seul qui guide le choix des entreprises... mais plus le fait que ce soit Microsoft, et comme ils ont déjà Win+Office MS leur fait une reduc je suppose...
ou alors il regardent juste le prix du produit sans regarder les heures de boulot pour faire l'interface du soft :D
 




 
 
c++ builder fait partie des(du) soft(s) dont je possede la license :D :D :D
 
en plus ils sont trop cool chez borland, j'avais acheté la version 5 ( la derniere dispo) pusi 3 semaines plus tard la 6 sortait, g envoyé un mail en gueulant, et ils m'ont envoyé la 6 gratos ! :lol: :lol: borland roulaizzzeeee


Message édité par farib le 29-07-2002 à 16:24:37
n°185453
LetoII
Le dormeur doit se réveiller
Posté le 29-07-2002 à 16:43:40  profilanswer
 

antp a écrit a écrit :

C++Builder standard est à un peu plus de 100 ? :p
 
Ce n'est pas le prix du produit seul qui guide le choix des entreprises... mais plus le fait que ce soit Microsoft, et comme ils ont déjà Win+Office MS leur fait une reduc je suppose...
ou alors il regardent juste le prix du produit sans regarder les heures de boulot pour faire l'interface du soft :D
 




 
Malheuresement je crois que c souvent le prix


---------------
Le Tyran
n°185557
farib
Posté le 29-07-2002 à 18:41:44  profilanswer
 

personne n'a de réponses pour le placement de mes "globales" ?

n°185559
antp
Super Administrateur
Champion des excuses bidons
Posté le 29-07-2002 à 18:47:56  profilanswer
 

pour la création, cf ma réponse
 
pour la déclaration, je mettrais ça dans un fichier global.cpp:
Interface * MonInterface;
 
Et dans un global.h tu mets:
extern Interface * MonInterface;
 
Comme ça tu inclues le .h où tu veux.


Message édité par antp le 29-07-2002 à 18:51:35

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
mood
Publicité
Posté le 29-07-2002 à 18:47:56  profilanswer
 

n°185566
LetoII
Le dormeur doit se réveiller
Posté le 29-07-2002 à 19:41:07  profilanswer
 

pas mieux


---------------
Le Tyran
n°185579
farib
Posté le 29-07-2002 à 20:31:21  profilanswer
 

comprend pas trop (je maitrise pas extern...)
 
alors mes classe
 
j'ai  
 
mes déclarations personnelles

Code :
  1. const int ZERO = 0 ;
  2. const int UN = 1;
  3. const int DEUX =2;
  4. const int TROIS = 3 ;
  5. const int QUATRE = 4;
  6. const int CINQ = 5;
  7. const int SIX = 6 ;
  8. const int SEPT = 7;
  9. const int HUIT = 8;
  10. const int NEUF = 9;
  11. const int VIRGULE =-1 ;
  12. const int EFFACER = 10;
  13. const int EMPILER = 12;
  14. const int DEPILER = 11;
  15. const int PLUS = 13;
  16. const int MOINS = 14;
  17. const int MULTIPLIER = 15 ;
  18. const int DIVISER = 16;
  19. const int NEGATION = 17;
  20. typedef struct Liste { double Element ; Liste * Suivant ;} Liste  ;
  21. enum TStringFloatFormat {sffGeneral, sffExponent, sffFixed, sffNumber, sffCurrency };
  22. class Calculette
  23. {
  24. ...
  25. }
  26. ;
  27. class Interface
  28. {
  29. ...
  30. };


 
 
la c la fonction qui fait l'affichage

Code :
  1. void Actualiser(Interface * UneInterface)
  2. {
  3.         Fenetre->Afficheur_Pile->Caption = UneInterface->Actualiser_Affichage_Pile();
  4.         Fenetre->Champ_Edition->Caption= UneInterface->Actualiser_Affichage_EditBox();
  5.         Fenetre->StatusBar->Panels->BeginUpdate();
  6.         Fenetre->StatusBar->Panels->Items[0]->Text = UneInterface->Lire_Description_Erreur();
  7.         Fenetre->StatusBar->Panels->EndUpdate();
  8. }


 
ma calculette doir etre créee
 

Code :
  1. Interface * MonInterface = new Interface () ;


 
et pour info
 
j'appele ma classe comme ca, par exemple

Code :
  1. void __fastcall TFenetre::Button7Click(TObject *Sender)
  2. {
  3. MonInterface->Touche(SEPT);//on rajoute 7
  4. Actualiser(MonInterface);  // on actualise
  5. }


 
 
ma question : ou dois-je placer tous ces éléments précédents ?

n°185589
antp
Super Administrateur
Champion des excuses bidons
Posté le 29-07-2002 à 21:29:38  profilanswer
 

bhen je l'ai dit : dans un global.cpp, et les prototypes des fonctions ainsi que les variables "extern" dans un .h que tu inclues là où tu en as besoin.
Tu mets "extern" pour dire que la variable est définie ailleurs que dans le .h, parce que si tu la définis dans le .h elle sera redéfinie dans tous les .cpp incluant ce .h, donc chaque .cpp aura sa propre variable globale... (je pense que ça ne compile pas d'ailleurs)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°185606
farib
Posté le 29-07-2002 à 22:24:11  profilanswer
 

g fait un tru c mais ca chie
 
 
texas.cpp (le fichier la fenetre principale)
 

Code :
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4. #include "texas.h"
  5. #include "about.h"
  6. #include "classes_annexes.h"
  7. //---------------------------------------------------------------------------
  8. #pragma package(smart_init)
  9. #pragma resource "*.dfm"
  10. TFenetre *Fenetre;
  11. void Actualiser(Interface * UneInterface)
  12. {
  13.         Fenetre->Afficheur_Pile->Caption = UneInterface->Actualiser_Affichage_Pile();
  14.         Fenetre->Champ_Edition->Caption= UneInterface->Actualiser_Affichage_EditBox();
  15.         Fenetre->StatusBar->Panels->BeginUpdate();
  16.         Fenetre->StatusBar->Panels->Items[0]->Text = UneInterface->Lire_Description_Erreur();
  17.         Fenetre->StatusBar->Panels->EndUpdate();
  18. }
  19. //---------------------------------------------------------------------------
  20. __fastcall TFenetre::TFenetre(TComponent* Owner)
  21.         : TForm(Owner)
  22. {
  23.         Actualiser(MonInterface);
  24.         Application->HelpFile = ExtractFilePath(Application->ExeName)+ "Calculette.hlp";
  25. }
  26. //---------------------------------------------------------------------------
  27. void __fastcall TFenetre::QuitterClick(TObject *Sender)
  28. {
  29. Fenetre->Close();
  30. }
  31. //---------------------------------------------------------------------------
  32. ....
  33. void __fastcall TFenetre::A_ProposClick(TObject *Sender)
  34. {
  35. AboutBox->ShowModal();
  36. }
  37. //---------------------------------------------------------------------------


 
 
texas.h

Code :
  1. //---------------------------------------------------------------------------
  2. #ifndef texasH
  3. #define texasH
  4. //---------------------------------------------------------------------------
  5. #include <Classes.hpp>
  6. #include <Controls.hpp>
  7. #include <StdCtrls.hpp>
  8. #include <Forms.hpp>
  9. #include <Menus.hpp>
  10. #include <Buttons.hpp>
  11. #include <ComCtrls.hpp>
  12. //---------------------------------------------------------------------------
  13. class TFenetre : public TForm
  14. {
  15. __published: // Composants gérés par l'EDI
  16.         TSpeedButton *Quitter;
  17.         [...]
  18.         void __fastcall MultiplicationClick(TObject *Sender);
  19.         void __fastcall DivisionClick(TObject *Sender);
  20.         void __fastcall EmpilerClick(TObject *Sender);
  21.         void __fastcall DepilerClick(TObject *Sender);
  22.         void __fastcall EffacerClick(TObject *Sender);
  23.         void __fastcall VirguleClick(TObject *Sender);
  24.         void __fastcall NegationClick(TObject *Sender);
  25.         void __fastcall ToucheEnfoncee(TObject *Sender, WORD &Key,
  26.           TShiftState Shift);
  27.         void __fastcall Quitter1Click(TObject *Sender);
  28.         void __fastcall Aide1Click(TObject *Sender);
  29.         void __fastcall A_ProposClick(TObject *Sender);
  30. private: // Déclarations de l'utilisateur
  31. public:  // Déclarations de l'utilisateur
  32.         __fastcall TFenetre(TComponent* Owner);
  33. };
  34. //---------------------------------------------------------------------------
  35. extern PACKAGE TFenetre *Fenetre;
  36. //---------------------------------------------------------------------------
  37. #endif


 
 
 
le fichier about a pas d'importance
 
fichier classes_annexes.cpp

Code :
  1. //---------------------------------------------------------------------------
  2. #pragma hdrstop
  3. #include "classes_annexes.h"
  4. //---------------------------------------------------------------------------
  5. #pragma package(smart_init)
  6.        Calculette::Calculette()
  7. {
  8.         Pile = NULL ;
  9.         Taille_Pile=0 ;
  10. }
  11.         Calculette::~Calculette ()
  12. {
  13.         int i = Taille_Pile; int Tempo2;
  14.         while (i!=0)  { Depiler(Tempo2) ; i-- ;}
  15. }
  16. void    Calculette::Ajouter( double Valeur)
  17. {
  18.         Liste * Temp1 = new  Liste ;
  19.         Temp1->Element = Valeur ;
  20.         Temp1->Suivant = Pile ;
  21.         Pile = Temp1;
  22. }
  23. void    Calculette::Retirer ()
  24. {
  25.         Liste * Temp = Pile ;
  26.         Pile = Pile->Suivant;
  27.         delete Temp ;
  28. }
  29. void Calculette::Empiler (double Valeur)
  30. {
  31.         Ajouter(Valeur);
  32.         Taille_Pile++;
  33. }
  34. bool Calculette::Depiler (double &Valeur)
  35. {
  36.         if (Taille_Pile == 0)
  37.          return false;
  38.          Valeur = Pile->Element;
  39.          Retirer();
  40.          Taille_Pile--;
  41.          return true ;
  42. }
  43. AnsiString Calculette::Afficher_Pile()
  44. {
  45.         AnsiString Resultat("" );
  46.         Resultat= ']';
  47.         Liste * Tempo = Pile ;
  48.         int Num = Taille_Pile ;
  49.         while (Num >0 )
  50.         {
  51.                 Resultat = FloatToStrF( (long double) Tempo->Element,sffGeneral,7,7)+Resultat;
  52.                 Num--;
  53.                 Tempo=Tempo->Suivant;
  54.                 if (Num > 0) Resultat = " "+Resultat;
  55.         }
  56.         Resultat  = "["+Resultat;
  57.         return Resultat;
  58. }
  59. bool    Calculette::Additionner()
  60. {
  61.         if (Taille_Pile < 2)
  62.         return false;
  63.         double Operande_1 ;
  64.         Depiler(Operande_1);
  65.         double Operande_2 ;
  66.         Depiler(Operande_2);
  67.         Empiler(Operande_1+Operande_2);
  68.         return true;
  69. }
  70. bool    Calculette::Soustraire()
  71. {
  72.         if (Taille_Pile < 2)
  73.         return false;
  74.         double Operande_1 ;
  75.         Depiler(Operande_1);
  76.         double Operande_2 ;
  77.         Depiler(Operande_2);
  78.         Empiler(Operande_1-Operande_2);
  79.         return true;
  80. }
  81. bool    Calculette::Multiplier()
  82. {
  83.         if (Taille_Pile < 2)
  84.         return false;
  85.         double Operande_1 ;
  86.         Depiler(Operande_1);
  87.         double Operande_2 ;
  88.         Depiler(Operande_2);
  89.         Empiler(Operande_1*Operande_2);
  90.         return true;
  91. }
  92. bool    Calculette::Diviser()
  93. {
  94.         if (Taille_Pile < 2)
  95.         return false;
  96.         double Operande_1 ;
  97.         Depiler(Operande_1);
  98.         if (Operande_1==0.)
  99.         {
  100.                 Empiler(Operande_1) ;
  101.                 return false ;
  102.         }        double Operande_2 ;
  103.         Depiler(Operande_2);
  104.         Empiler(Operande_1/Operande_2);
  105.         return true;
  106. }
  107. bool    Calculette::Negation()
  108. {
  109.         if (Taille_Pile < 1)
  110.         return false;
  111.         double Operande;
  112.         Depiler(Operande);
  113.         Empiler(-Operande);
  114.         return true;
  115. }
  116.         Interface::Interface()
  117. {
  118.         MaCalculette = new Calculette ();
  119.         EditBox="";
  120.         Virgule = false ;
  121. }
  122.         Interface::~Interface()
  123. {
  124.         delete MaCalculette;
  125. }
  126. AnsiString Interface::Lire_Description_Erreur()
  127. {
  128.         return Description_Erreur ;
  129. }
  130. void Interface::Touche(int Key_Pushed)
  131. {
  132.         Description_Erreur = " OK ";
  133.         if (Key_Pushed >=VIRGULE  && Key_Pushed <= EFFACER)
  134.         Edition(Key_Pushed);
  135.         else
  136.         switch (Key_Pushed)
  137.         {
  138.         case EMPILER :  if (EditBox=="" )
  139.                          Description_Erreur="Pas d'élément à empiler !";
  140.                          else
  141.                          {
  142.                                 Virgule = false ;
  143.                                 MaCalculette->Empiler(EditBox.ToDouble()) ;EditBox="";
  144.                          }
  145.                          break;
  146.         case DEPILER :   double Temp ;
  147.                          if (!MaCalculette->Depiler(Temp))
  148.                                 Description_Erreur="Pile vide !";
  149.                          break;
  150.         case PLUS    :  if (EditBox!="" )
  151.                                 Touche(EMPILER);
  152.                         if (!MaCalculette->Additionner())
  153.                                 Description_Erreur="Pas assez d'Opérandes" ;
  154.                           break;
  155.         case MOINS   :   if (EditBox!="" )
  156.                                 Touche(EMPILER);
  157.                         if (!MaCalculette->Soustraire())
  158.                                 Description_Erreur="Pas assez d'Opérandes" ;
  159.                           break;
  160.         case MULTIPLIER : if (EditBox!="" )
  161.                                 Touche(EMPILER);
  162.                          if (!MaCalculette->Multiplier())
  163.                                 Description_Erreur="Pas assez d'Opérandes" ;
  164.                          break;
  165.         case DIVISER :   if (EditBox!="" )
  166.                                 Touche(EMPILER);
  167.                         if (!MaCalculette->Diviser())
  168.                                  Description_Erreur="Pas assez d'Opérandes ou division par zéro" ;
  169.                          break;
  170.         case NEGATION :  if (EditBox!="" )
  171.                                 Touche(EMPILER);
  172.                         MaCalculette->Negation();
  173.                         break;
  174.         }
  175. }
  176. void Interface::Edition(int Key_Pushed)
  177. {
  178.          if (Key_Pushed >=ZERO  && Key_Pushed <= NEUF)
  179.          {
  180.                 AnsiString Tempo = Key_Pushed ;
  181.                 EditBox=EditBox+Tempo;
  182.          }
  183.          if (Key_Pushed == EFFACER)
  184.                 EditBox.Delete(EditBox.Length(),1);
  185.          if (Key_Pushed == VIRGULE )
  186.                 if (!Virgule)
  187.                 {
  188.                         Virgule=true;
  189.                         EditBox=EditBox+",";
  190.                 }
  191. }
  192. AnsiString Interface::Actualiser_Affichage_Pile()
  193. {
  194.         return MaCalculette->Afficher_Pile();
  195. }
  196. AnsiString    Interface::Actualiser_Affichage_EditBox()
  197. {
  198.         return EditBox;
  199. }


 
et le classe_annexes.h, inclus dans le texas.cpp
 

Code :
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #ifndef classes_annexesH
  4. #define classes_annexesH
  5. //---------------------------------------------------------------------------
  6. #endif
  7. const int ZERO = 0 ;
  8. [...]
  9. const int NEGATION = 17;
  10. typedef struct Liste { double Element ; Liste * Suivant ;} Liste  ;
  11. enum TStringFloatFormat {sffGeneral, sffExponent, sffFixed, sffNumber, sffCurrency };
  12. class Calculette
  13. {
  14. [...]
  15. }
  16. ;
  17. class Interface
  18. {
  19. [...]
  20. };
  21. extern Interface * MonInterface;


 
[Lieur Erreur] Unresolved external '_MonInterface' referenced from C:\DOCUMENTS AND SETTINGS\FARIB\MES DOCUMENTS\CALCULETTE\TEXAS.OBJ
je capte pas le fonctionnement de extern :D


Message édité par farib le 29-07-2002 à 22:26:13
n°185639
antp
Super Administrateur
Champion des excuses bidons
Posté le 29-07-2002 à 23:25:15  profilanswer
 

tu dois, dans n'importe quel CPP de ton projet, mettre
Interface * MonInterface;
 
le extern permet de dire "il existe une variable de ce type et de ce nom, déclarée ailleurs dans le programme".
 
Le message d'erreur que tu as veut dire que nulle part dans ton projet il a trouvé cette variable


Message édité par antp le 29-07-2002 à 23:25:44

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°185646
farib
Posté le 29-07-2002 à 23:36:21  profilanswer
 

'ai rajouté interface * Moninterface

Code :
  1. #include "texas.h"
  2. #include "about.h"
  3. #include "classes_annexes.h"
  4. //---------------------------------------------------------------------------
  5. #pragma package(smart_init)
  6. #pragma resource "*.dfm"
  7. TFenetre *Fenetre;
  8. Interface* MonInterface; // <--la !
  9. void Actualiser(Interface * UneInterface)
  10. {
  11.         Fenetre->Afficheur_Pile->Caption = UneInterface->Actualiser_Affichage_Pile();
  12.         Fenetre->Champ_Edition->Caption= UneInterface->Actualiser_Affichage_EditBox();
  13.         Fenetre->StatusBar->Panels->BeginUpdate();
  14.         Fenetre->StatusBar->Panels->Items[0]->Text = UneInterface->Lire_Description_Erreur();
  15.         Fenetre->StatusBar->Panels->EndUpdate();
  16. }
  17. //---------------------------------------------------------------------------
  18. __fastcall TFenetre::TFenetre(TComponent* Owner)
  19.         : TForm(Owner)
  20. {
  21.         Actualiser(MonInterface);
  22.         Application->HelpFile = ExtractFilePath(Application->ExeName)+ "Calculette.hlp";
  23. }
  24. //---------------------------------------------------------------------------
  25. void __fastcall TFenetre::QuitterClick(TObject *Sender)
  26. {
  27. Fenetre->Close();
  28. }
  29. /
  30. //---------------------------------------------------------------------------
  31. [...]
  32. void __fastcall TFenetre::NegationClick(TObject *Sender)
  33. {
  34. MonInterface->Touche(NEGATION);
  35. Actualiser(MonInterface);
  36. //---------------------------------------------------------------------------


 
 
ca fé une erreur mémoire :/g vu avec le débogueu parke il commence par créer la fiche, mais au moment ou il initialise, MonInterface a pas été crée (quand il initialise, il appele Actualiser....)


Message édité par farib le 29-07-2002 à 23:54:39
n°185653
antp
Super Administrateur
Champion des excuses bidons
Posté le 29-07-2002 à 23:53:14  profilanswer
 

Tu as assigné à la variable un "new Interface" quelque part au lancement du programme, avant toute utilisation ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°185655
farib
Posté le 29-07-2002 à 23:57:46  profilanswer
 

non, car j'avasi cru comprender que c t pas la peine....j'avasi mal compris, autant pour moi :D
 
justemetn le new INterface(), fo ke je le place ou

n°185656
antp
Super Administrateur
Champion des excuses bidons
Posté le 29-07-2002 à 23:59:21  profilanswer
 

quelque part dans la fonction que tu veux, du moment que ça se passe avant que tu utilises l'objet MonInterface


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°185663
farib
Posté le 30-07-2002 à 00:08:04  profilanswer
 

maintenant mes source sont pures et propres :jap::jap:
 
(elles ont trouvé une certaine virginité)
 
 
EDIT
 
si je met Interface* MonInterface dans le classes_annexes.h inclus seulement, avec pas de extern, ca compile, avec un warning du lieur ( et ca marche)
 


Message édité par farib le 30-07-2002 à 00:10:51
n°185665
antp
Super Administrateur
Champion des excuses bidons
Posté le 30-07-2002 à 00:12:40  profilanswer
 

Mwouais possible que ça marche sans extern mais méfie toi, je t'assure que le extern n'est pas inutile ;)
J'ai déjà eu des très drôles de truc en incluant dans plusieurs fichiers .cpp des .h contenant des variables non extern :o


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [c++builder] declaration, initialisation de variables "globales"

 

Sujets relatifs
[C++ Builder] Piloter Excel ... Arg !super le nom des variables dans le forum
[C++ Builder] Comment on met une police en bold DANS LE PROGDans une batch DOS, comment fonctionne les variables???
[C++ Builder] Quel .h inclure pour la fonction ROUND ?[C++ Builder] Comment n afficher ke 2 chiffres apres la virgule(float)
Afficher des variables comme des répertoires dans l'URL.Quel est le nom de vos variables temporaires ?
Allocation memoire et initialisation par memset.[debugage]Tracer l'état des variables ?
Plus de sujets relatifs à : [c++builder] declaration, initialisation de variables "globales"


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR