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

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

Marsh Posté le 29-07-2002 à 15:28:51    

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
Reply

Marsh Posté le 29-07-2002 à 15:28:51   

Reply

Marsh Posté le 29-07-2002 à 15:46:00    

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
Reply

Marsh Posté le 29-07-2002 à 16:15:56    

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

Reply

Marsh Posté le 29-07-2002 à 16:17:35    

: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
Reply

Marsh Posté le 29-07-2002 à 16:18:59    

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
Reply

Marsh Posté le 29-07-2002 à 16:19:31    

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
Reply

Marsh Posté le 29-07-2002 à 16:24:16    

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
Reply

Marsh Posté le 29-07-2002 à 16:43:40    

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
Reply

Marsh Posté le 29-07-2002 à 18:41:44    

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

Reply

Marsh Posté le 29-07-2002 à 18:47:56    

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
Reply

Marsh Posté le 29-07-2002 à 18:47:56   

Reply

Marsh Posté le 29-07-2002 à 19:41:07    

pas mieux


---------------
Le Tyran
Reply

Marsh Posté le 29-07-2002 à 20:31:21    

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 ?

Reply

Marsh Posté le 29-07-2002 à 21:29:38    

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
Reply

Marsh Posté le 29-07-2002 à 22:24:11    

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
Reply

Marsh Posté le 29-07-2002 à 23:25:15    

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
Reply

Marsh Posté le 29-07-2002 à 23:36:21    

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

Marsh Posté le 29-07-2002 à 23:53:14    

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
Reply

Marsh Posté le 29-07-2002 à 23:57:46    

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

Reply

Marsh Posté le 29-07-2002 à 23:59:21    

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
Reply

Marsh Posté le 30-07-2002 à 00:08:04    

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
Reply

Marsh Posté le 30-07-2002 à 00:12:40    

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
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed