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

  FORUM HardWare.fr
  Programmation
  C++

  extern

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

extern

n°597132
Tsu
Cours Forrest!
Posté le 26-12-2003 à 11:54:16  profilanswer
 

Je vois que vous etes plutot bons en C++ alors j'ai bon espoir que quelqu'un me lache l'info que je recherche :)
 
J'essaie de faire un extern dans C++ builder.
Cet extern doit se faire sur une TList de type maison (nommons le "MyType" )
je déclare mon typedef MyType et mon extern TList lMyType;
Cependant, a la compil, il me sort une erreur :
 
pointeur sur structure nécessaire du coté gauche de "->"
à l'instruction :

Code :
  1. if (lMyType->Count != 0)


 
J'essaie juste de comprendre comment fonctionne extern et je ne doute pas d'avoir une lacune que certains d'entre vous jugeront impardonnable ;)


---------------
A vaincre sans péril, on triomphe sans gloire
mood
Publicité
Posté le 26-12-2003 à 11:54:16  profilanswer
 

n°597136
Taz
bisounours-codeur
Posté le 26-12-2003 à 12:04:50  profilanswer
 

ben je crois que c'est clair : où tu vois que lMyType est un pointeur ?

n°597153
blackgodde​ss
vive le troll !
Posté le 26-12-2003 à 13:12:24  profilanswer
 

TList lMyType;
TList* ptr_lMyType = &lMyType;
la ptr_lMyType est un pointeur.


---------------
-( BlackGoddess )-
n°597162
Tsu
Cours Forrest!
Posté le 26-12-2003 à 13:31:55  profilanswer
 

Je vérifie... si c'est ça, je me reconvertit en moine tibétain ;)


---------------
A vaincre sans péril, on triomphe sans gloire
n°597167
Tsu
Cours Forrest!
Posté le 26-12-2003 à 13:37:31  profilanswer
 

OK je viens vous annoncer que la communauté tibétaine vient de s'agrandir d'un membre... OOOooooommm
 
Ceci dit je me retrouve avec un unresolved external "lMyType" au linkage (dans maClasse.OBJ)
 
Si vous pouviez me dire quel symptôme ceci invoque... je vous en serais reconnaissant.
(j'ai cette fois ci vérifié et la première définition dans le principal de mon projet est bien référencé TList* lMyType) et se trouve en public.


---------------
A vaincre sans péril, on triomphe sans gloire
n°597168
Tsu
Cours Forrest!
Posté le 26-12-2003 à 13:38:12  profilanswer
 

et déjà Merci pour votre réponse Taz et BlackGoddess


---------------
A vaincre sans péril, on triomphe sans gloire
n°597170
Taz
bisounours-codeur
Posté le 26-12-2003 à 13:41:15  profilanswer
 

extern n'est qu'une déclaration, aucun espace mémoire n'est alloué. il faut ailleurs une définition (la même chose sans l'extern pour faire simple)

n°597178
Tsu
Cours Forrest!
Posté le 26-12-2003 à 14:07:48  profilanswer
 

taz a écrit :

extern n'est qu'une déclaration, aucun espace mémoire n'est alloué. il faut ailleurs une définition (la même chose sans l'extern pour faire simple)


 
C'est fait Taz, je te mets mon code du header de mon module principal :
 
je cherche a faire des triggers et comme tu peux le voir, la déclaration dans mon public n'est pas étancée d'un extern..
 

Code :
  1. //---------------------------------------------------------------------------
  2. #ifndef AccueilH
  3. #define AccueilH
  4. //---------------------------------------------------------------------------
  5. #include <Classes.hpp>
  6. #include <Controls.hpp>
  7. #include <StdCtrls.hpp>
  8. #include <Forms.hpp>
  9. #include <Menus.hpp>
  10. #include <DateUtils.hpp>
  11. #include <DB.hpp>
  12. #include <DBTables.hpp>
  13. #include <ExtCtrls.hpp>
  14. //---------------------------------------------------------------------------
  15. #define TYPE_ANNEE 0
  16. #define TYPE_MOIS 1
  17. #define TYPE_JOUR 2
  18. #define TYPE_HEURE 3
  19. #define TYPE_MINUTE 4
  20. #define TYPE_SECONDE 5
  21. #define TYPE_MSEC 6
  22. typedef struct trigger{
  23. AnsiString SQL;   //chaine SQL à effectuer
  24. TDateTime prochaineExecution;  //date de la prochaine exécution
  25. int type;   //definit le type de trigger ... tous les x jours, toutes les x heures
  26. int delai;   //nombre de type entre deux exécutions
  27. int nb;    //nombre de répétition à effectuer pour cette tache
  28. AnsiString BDName;  //nom de la base de données voulue
  29. AnsiString filename;  //nom du fichier qui va caractériser le trigger
  30. }trigger;
  31. class TPrincipal : public TForm
  32. {
  33. __published: // Composants gérés par l'EDI
  34. TMainMenu *MainMenu1;
  35. TMenuItem *Fichier1;
  36. TMenuItem *Motdepasse1;
  37. TMenuItem *Sortir1;
  38. TMenuItem *infos1;
  39. TMenuItem *Basesdedonnes1;
  40. TLabel *Label1;
  41. TLabel *Label2;
  42. TLabel *Informations;
  43. TMenuItem *Triggers1;
  44. TMenuItem *Nouvelle1;
  45. TMenuItem *Effacer1;
  46. TMenuItem *Variables1;
  47. TMenuItem *Scan1;
  48. TMenuItem *Voirencours1;
  49. TTimer *TimerTrigg;
  50. TDatabase *BD;
  51. void __fastcall Motdepasse1Click(TObject *Sender);
  52. void __fastcall Nouvelle1Click(TObject *Sender);
  53. void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
  54. void __fastcall Voirencours1Click(TObject *Sender);
  55. private: // Déclarations de l'utilisateur
  56. void classer();
  57. void defTimer();
  58. void executeTrigger();
  59. public:  // Déclarations de l'utilisateur
  60. __fastcall TPrincipal(TComponent* Owner);
  61. void ChargerDefs();
  62. void init();
  63. void erreur(int, AnsiString*);
  64. int calculProchaineExec(trigger* trigg);
  65. void insererTrigger(trigger* trigg);
  66. void sauvegarderDefs();
  67. void libererMemoire();
  68. TList* lTriggers; //liste des triggers actuelles.
  69. };
  70. //---------------------------------------------------------------------------
  71. extern PACKAGE TPrincipal *Principal;
  72. //---------------------------------------------------------------------------
  73. #endif


---------------
A vaincre sans péril, on triomphe sans gloire
n°597208
Tsu
Cours Forrest!
Posté le 26-12-2003 à 15:37:34  profilanswer
 

si j'ai dit une bêtise, merci de me le faire remarquer ;)


---------------
A vaincre sans péril, on triomphe sans gloire
n°597279
Taz
bisounours-codeur
Posté le 26-12-2003 à 19:05:41  profilanswer
 

ignoble
 
vive le C ...

mood
Publicité
Posté le 26-12-2003 à 19:05:41  profilanswer
 

n°597314
blackgodde​ss
vive le troll !
Posté le 26-12-2003 à 21:45:00  profilanswer
 

extern PACKAGE TPrincipal *Principal;
=> la dans tous les .cpp a compiler ou il y aura #include "accueil.hpp" (je suppose) le compilo saura qu'il existe TPrincipal *Principal;, une maniere simpliste de voir serait de dire que l'extern rappelle la déclaration au compilo (etend la portée), mais il faut que ta déclaration soit faite dans un de des fichiers, sans l'extern (la "vraie" déclaration)
 
par exemple :  
 
dans un fichier chouxfleur.cpp
 

Code :
  1. #include "accueil.hpp"
  2. ...


 
dans un fichier choucroute.cpp
 

Code :
  1. #include "accueil.hpp"
  2. ...


 
et dans u nfichier accueil.cpp
 

Code :
  1. #include "accueil.hpp"
  2. TPrincipal *Principal;
  3. ...


 
sinon, le typedef struct machin { ... } machin; est inutile en c++, on laisse struct machin { ... };
 
sinon, peut-etre pourrais-tu utiliser un peu plus de références et un peu moins de pointeurs ?
 
void __fastcall Motdepasse1Click(TObject *Sender);
=> je suppose que c'est auto-généré, c'est un pointeur pour permettre le polymorphisme je suppose... mais
void erreur(int, AnsiString*);
tu pourrais p-e mettre void erreur(int, AnsiString & ); (sans parler de constance)
 
enfin, c'est mon avis sur la maniere ... je suppose que Taz en aura un autre :p


---------------
-( BlackGoddess )-
n°597315
blackgodde​ss
vive le troll !
Posté le 26-12-2003 à 21:53:30  profilanswer
 

sinon, je n'avais pas vu le passage
 
#define TYPE_ANNEE 0
...
 
int type;
 
tu peux peut-etre utiliser une enumération pour plus de sécurité :
 
enum TypeTrigger { TYPE_ANNEE, TYPE_MOIS, TYPE_JOUR, TYPE_HEURE, TYPE_MINUTE, TYPE_SECONDE, TYPE_MSEC };
...
TypeTrigger type;


---------------
-( BlackGoddess )-
n°598299
Tsu
Cours Forrest!
Posté le 29-12-2003 à 09:12:43  profilanswer
 

lol effectivement sur la forme y a pas mal de choses a revoir et pas mal du code est généré automatiquement (le TObject* Sender est effectivmeent une merde qui est placée là et qui fait davantage chier que servir ;) en tout cas pour moi.).
Ceci dit merci pour les précisions BlackGoddess. Je vais essayer :)
 
 
 


---------------
A vaincre sans péril, on triomphe sans gloire
n°598309
Tsu
Cours Forrest!
Posté le 29-12-2003 à 10:18:02  profilanswer
 

ok j ai essayé en incluant le header dans mes formulaires fils...
Bon ca compile...
mais a l exec, les valeurs de ma liste LORSQUE JE L'APPELLE DEPUIS LE FORMULAIRE FILS, sont complètement n'importe quoi.
 
En débuggant : je saisis une trigger : je regarde dans mes var et je vois qu'elle a bien été intégrée dans ma liste.
J'arrive a la ressortir de la liste.
j'appelle mon form de modification.
J'appelle la liste... et il me sort des valeurs tirées de n'importe ou.
J'ai meme essayé de faire une méthode qui me remplit un pointeur sur trigger a partir de la pos dans le formulaire principal, mais ca fait la meme chose : la fct fonctionne correctement lorsque je suis dans mon formulaire principal et merde dans mon form de modif...
 
Quelqu'un voit il quelque chose qui causerait ce probleme de référenciation douteuse??
 
(lorsque je regarde les propriétés count et capacity de ma list, il me semble qu'elles sont justes dans les 2 forms, ce serait donc le pointeur qui ferait nimp')
 
Pitiéééé aidez moi!!!


---------------
A vaincre sans péril, on triomphe sans gloire
n°598313
blackgodde​ss
vive le troll !
Posté le 29-12-2003 à 10:36:41  profilanswer
 

problème de portée p-e ?


---------------
-( BlackGoddess )-
n°598425
Tsu
Cours Forrest!
Posté le 29-12-2003 à 13:53:03  profilanswer
 

exact, j'ai corrigé le tir ;)
c est débile les conneries que je laisse des fois dans mon code ;)
merci pour toute votre aide BlackGoddess et Taz!


---------------
A vaincre sans péril, on triomphe sans gloire
n°598537
blackgodde​ss
vive le troll !
Posté le 29-12-2003 à 17:08:21  profilanswer
 

de rien :)


---------------
-( BlackGoddess )-

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

  extern

 

Sujets relatifs
extern fonctionextern
extern[C] fonction extern déclaré dans les .h
[C++] A quoi ca sert la directive extern "C"[C++] Utilité de déclarer une variable en extern ?
Plus de sujets relatifs à : extern


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