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

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Accéder à une variable d'une unité, dans une autre unité

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Accéder à une variable d'une unité, dans une autre unité

n°371447
ndmax
Posté le 25-04-2003 à 10:15:57  profilanswer
 

Slt.
Nouveau petit problème, cette fois-ci,
j'ai déclaré et rempli un tableau dans une
unité2 et je désire l'utiliser dans une unité1.
Il est déclaré en tant que variable globale,
cad avant l'implémentation, et j'ai bien mis
l'unité2 dans le uses de l'unité1.
Je ne comprends pas pourquoi il ne peut pas
y accéder..
Faut-il obligatoirement créer un héritage ??
 
Merci.

mood
Publicité
Posté le 25-04-2003 à 10:15:57  profilanswer
 

n°371508
bounty
Posté le 25-04-2003 à 10:30:50  profilanswer
 

Bon alors, par ou commencer?
 
je crois que le prob c'est que tu a déclaré une classe dans unit2 et une variable ds unit1 . Pr acceder à ton tableau, tu dois passer par cette variable.
 
j'vais te donner un exemple, tu comprendra mieux [:xman]  
 
ds unit1 tu as qqch du style

Code :
  1. uses unit2.pas


 
ds unit2 tu dois avoir qqch du style

Code :
  1. type Tform2 //par ex
  2. public
  3. tab1:array of string;//le tableau
  4. ...
  5. private
  6. ....
  7. protected
  8. ....


 
Si tu reviens ds unit1 qqpart il doit y avoir

Code :
  1. var
  2. form2:Tform2
  3. ...


du coup, pour acceder à ton tableau, tu dois taper  

Code :
  1. Form2.tab1[i]


 
Alors, j'ai bon??
 :whistle:

n°371553
ndmax
Posté le 25-04-2003 à 10:51:50  profilanswer
 

Ben en fait, je viens de tester comme ça :
 
Dans unit2 :
 

Code :
  1. type
  2.   TMenu2 = class
  3.   public
  4.     tab: Array of string;
  5. var
  6.   Menu2: TMenu2;


 
 
Dans unit1 :
 

Code :
  1. uses unit2
  2. Menu2.tab // utilisé dans une procédure


 
 
Ca compile très bien, mais à l'exécution, ya
un problème de violation d'accès à une certaine adresse..
 
 
 

n°371571
bounty
Posté le 25-04-2003 à 11:00:19  profilanswer
 

ça c'est parce que tu utilise un tableau dynamique.
 
tu dois utiliser setlength pr initialiser ton tableau

n°371600
ndmax
Posté le 25-04-2003 à 11:09:48  profilanswer
 

J'ai utilisé SetLength dans unit2 !!
 
Mais en fait, je viens de m'apercevoir que
ça merde juste avant que je fasse appelle
à ce tableau dans unit1.
Ca merde lorsque, dans unit1, je fais appel
à une procédure de unit2 en faisant :
Menu2.procedure
 
Pourtant, ça marche avec d'autres choses..
Je vais voir tout ça, je pense que je vais
trouver l'erreur..   :)

n°371622
antp
Super Administrateur
Champion des excuses bidons
Posté le 25-04-2003 à 11:15:55  profilanswer
 

doit y avoir un objet (menu2 par ex) qui est pas instancé ou un truc du genre [:spamafote]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°371632
ndmax
Posté le 25-04-2003 à 11:20:07  profilanswer
 

L'erreur se produit lorsque je fais

Code :
  1. SetLength(tab,100) // par exemple


 
mais uniquement lorsque tab est déclaré
dans la partie public !!!
Je l'ai remis dans la partie var
et ça marche sans problème..........
... à part que je n'y ai plus accès dans unit1 !!!!  :fou:

n°371634
antp
Super Administrateur
Champion des excuses bidons
Posté le 25-04-2003 à 11:22:08  profilanswer
 

dans var au niveau de interface ou au niveau de implementation ? c'est dans la 1e partie
et y a pas de raison que tu n'y aies pas accès


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°371654
ndmax
Posté le 25-04-2003 à 11:34:22  profilanswer
 

c'est déclaré dans var de l'interface !!
et qd je le mets dans public dans interface ==> erreur..
 
Et dans var de interface, je n'y ai pas accès
dans l'unit1 en faisant Menu2.tab   :fou:

n°371655
antp
Super Administrateur
Champion des excuses bidons
Posté le 25-04-2003 à 11:35:15  profilanswer
 

heu si tu le mets hors de la classe tu dois pas mettre menu2. devant vu que c'est le nom de l'objet (instance de la classe)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
mood
Publicité
Posté le 25-04-2003 à 11:35:15  profilanswer
 

n°371660
ndmax
Posté le 25-04-2003 à 11:38:26  profilanswer
 

HAAAAAAAAAA !!!!
OK, merci bcp, ça marche !!!!
 
Mais je pensais que c'était dans la classe..
Je croyais que ma classe représentait TOUTE l'unité !
 
On en apprend tous lesjours !!
Merci !!!!  :jap:  :jap:  
Et Bounty aussi !!  :jap:  :jap:

n°371668
antp
Super Administrateur
Champion des excuses bidons
Posté le 25-04-2003 à 11:42:50  profilanswer
 

Si jamais tu as des "tab" ailleurs et qu'il y a un risque de confusion, tu peux mettre unit2.tab pour préciser que c'est le tav de unit2 que tu veux utiliser


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°371679
bounty
Posté le 25-04-2003 à 11:52:42  profilanswer
 

Ndmax a écrit :

HAAAAAAAAAA !!!!
OK, merci bcp, ça marche !!!!
 
Mais je pensais que c'était dans la classe..
Je croyais que ma classe représentait TOUTE l'unité !
 
On en apprend tous lesjours !!
Merci !!!!  :jap:  :jap:  
Et Bounty aussi !!  :jap:  :jap:  


De rien
pour etre complet j'ajouterai qu' une classe se definit comme suis:
 
ds la partie interface

Code :
  1. type
  2.   Tclass1=class
  3.     private
  4.     variable1:string;
  5.     procedure xyz;
  6.     protected
  7.     public
  8.     //ne pas oublier le constructeur et le destructeur à placer  ici
  9.   end;
  10.   Tclass2=class
  11.     private
  12.     protected
  13.     public
  14.   end;
  15. end;//fin declaration des types


et dans la partie implementation:

Code :
  1. procedure Tclass1.xyz
  2. var
  3. a:string;
  4. begin
  5. variable1=a;//exemple à la con mais bon
  6. end;


Message édité par bounty le 25-04-2003 à 11:53:28
n°371685
ndmax
Posté le 25-04-2003 à 11:58:58  profilanswer
 

Ok, merci !!  :jap:  
 
Mais je n'utilise jamais de constructeurs
et destructeurs...
Il faut absolument s'en servir ??
 
En fait, je connais bien le Java,
mais je ne sais pas si c'est la même chose.
Déjà en Java, pas besoin de destructeur,
c'est automatique..
 
Ici, je ne me sers que des uses pour utiliser
d'autres "unités" ou "classes" mais jamais les
contructeurs qu'il faut créer soi-même..

n°371687
antp
Super Administrateur
Champion des excuses bidons
Posté le 25-04-2003 à 12:00:14  profilanswer
 

Tiens tant qu'on y est, si tu commences en Delphi et qu'on ne t'impose pas de conventions d'écriture particulières, il vaut mieux suivre les recommendations de Borland au niveau de l'écriture du code :
http://community.borland.com/artic [...] 80,00.html
Si tout le monde utilise un même standard c'est plus agréable pour l'échange d'infos ;)
Et le Pascal étant justement assez lisible, autant l'écrire de manière à ce qu'il le reste :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°371690
antp
Super Administrateur
Champion des excuses bidons
Posté le 25-04-2003 à 12:02:24  profilanswer
 

Ndmax a écrit :

Mais je n'utilise jamais de constructeurs
et destructeurs...
Il faut absolument s'en servir ??


 
Si ta classe a des autres classes qu'elle doit libérer (.Free), il faut mettre ça dans le destructeur. Idem s'il y a des opérations à faire lorsque tu détruis l'objet.
Pour le constructeur, c'est surtout pour l'initialisation de données que tu peux en avoir besoin. Sinon il y a un constructeur par défaut (.Create) qui vient du TObject (toutes les classes descendent obligatoirement de TObject même si on ne le spécifie pas)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°371705
ndmax
Posté le 25-04-2003 à 12:23:52  profilanswer
 

OK, je savais que toutes les classes
descendaient de TObject, comme en Java d'ailleurs ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  Accéder à une variable d'une unité, dans une autre unité

 

Sujets relatifs
[ASM] Afficher un variable dwDéclarer un tableau à l'aide d'une variable..
[PHP] Problème d'upload et affichage de variabletableaux à dimension variable imbriqués :/
lancer une commande avec une variable comme paramètre1 variable global changée dans une fonction garde sa nouvelle valeur?
[Access] acceder à une requête pas encore executéeComment envoyer la valeur d'une variable PHP d'une page à une autre ?
récupérer une variable JS !Accéder à un thread créé ??
Plus de sujets relatifs à : Accéder à une variable d'une unité, dans une autre unité


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