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

  FORUM HardWare.fr
  Programmation
  C++

  gros debutant en c++ (quelque notions) Recuper variable d'une classe ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

gros debutant en c++ (quelque notions) Recuper variable d'une classe ?

n°554097
roromaino
Posté le 29-10-2003 à 23:47:27  profilanswer
 

Et oui , comment recuperer la valeur d'une variable declaré en public dans une classe dans un autre fichier.cpp. Je m'explique:
J'ai une classe :dans le fichier "SimplePartie.h"

Code :
  1. class TForm5 : public TForm
  2. {
  3. private:
  4. publicint nombreCouleur;
  5. };


la variable nombreCouleur est traité dans le fichier SimplePartie.cpp
 
Je veux donc utiliser la valeur de cette variable dans le fichier main.cpp
j'ai bien inclu "SimplePartie.h" dans mon main.cpp
mais borland il est pas content.
Comment utiliser cette variable ?
exemple :
je veux faire dans mon main.cpp

Code :
  1. int essai;
  2. nombreCouleur= essai;


mais borland avec ca il tire la gueule...
c pitete parce que je suis debutant  :pt1cable:

mood
Publicité
Posté le 29-10-2003 à 23:47:27  profilanswer
 

n°554099
SquiZZ
Posté le 30-10-2003 à 00:15:50  profilanswer
 

[:erowen1234]  
une variable membre n'existe qu'a l'intérieur de sa classe.
tu ne peux pas utiliser une variable membre comme ça toute seule.
il faut créer une instance de ta classe :

Code :
  1. TForm5 maForm;


 
ensuite tu peux accéder à la variable membre de l'instance de ta classe :

Code :
  1. maForm.nombreCouleur = 5;


 
je te conseille fortement de lire qques documentations sur le C++ et la programmation orientée objet avant de continuer plus loin.
 
Je te conseille "Thinking in C++" qui a l'avantage de comporter un chapitre qui présente les notions importantes telles que l'encapsulation par exemple.
trouvable ici : http://www.codecuts.com/mainpage.asp?WebPageID=315
 

n°554100
iS@mi
Resistance is futile !
Posté le 30-10-2003 à 00:29:32  profilanswer
 

Y a aussi le célèbre "Cours de C/C++" :
 
http://casteyde.christian.free.fr/ [...] book1.html
 
Voilà, bonne lecture...

n°554188
LetoII
Le dormeur doit se réveiller
Posté le 30-10-2003 à 09:14:52  profilanswer
 

Je crois qu'une révision s'impose effectivement... Si non c un membre de classe qu'il te faut:
 

Code :
  1. class MaClass
  2. {
  3.   public:
  4.       static int GetMonChamp(){return MonChamp;}
  5.   private:
  6.       static int MonChamp;
  7. };


---------------
Le Tyran
n°554411
roromaino
Posté le 30-10-2003 à 12:28:53  profilanswer
 

ok merci a vous 3 je regarde ca de suite avant de continuer. Je crois que c'est preferable.

n°554509
roromaino
Posté le 30-10-2003 à 14:45:39  profilanswer
 

Bon alors j'ai suivi vos conseil et j'ai mis le nez dans des cours mais un truc derange borland, j'ai regarder de plus pres le probleme mais je trouve pas .
Alors voila ce que cela donne avec vos conseils et les cours:
 
J'ai une classe :dans le fichier "SimplePartie.h"  

Code :
  1. class TForm5 : public TForm
  2. {
  3. private: int nombreCouleur;
  4. publicstatic int GetnombreCouleur(){return nombreCouleur;}
  5. };

 
la variable nombreCouleur est traité dans le fichier SimplePartie.cpp
 
voici mon main.cpp là ou je dois recuperer la valeur de la variable membre nombreCouleur.
 

Code :
  1. #include "SimplePartie.h"
  2. TForm1 *Form1;//créé automatiquement
  3. TForm5 maForm;
  4. __fastcall TForm1::TForm1(TComponent* Owner)
  5.         : TForm(Owner)//créé automatiquement
  6. {
  7. int essai;
  8. maForm.GetnombreCouleur= essai;

 
 
Voici les 2 erreurs que ca me donne sur "TForm5 maForm;"
[C++ Erreur] main.cpp(15): E2459 Les classes de style VCL doivent être construites en utilisant l'opérateur new
 
[C++ Erreur] main.cpp(15): E2285 Impossible de trouver une correspondance pour 'TForm5::TForm5()'
 
J'ai regarder comment marchais l'operateur "new" mais je n'y arrive pas. Please help...  
 
 
 

n°554552
roromaino
Posté le 30-10-2003 à 15:19:10  profilanswer
 

J'ai un avancement.
je ne doit pas ecrire : TForm5 maForm;
mais TForm5 *maForm = new TForm5();
 
Mais borland me dit qu'il y a toujours cet ereur la :
[C++ Erreur] main.cpp(17): E2285 Impossible de trouver une correspondance pour 'TForm5::TForm5()'

n°554599
LetoII
Le dormeur doit se réveiller
Posté le 30-10-2003 à 15:52:48  profilanswer
 

Avec un constructeur c mieux


---------------
Le Tyran
n°554640
roromaino
Posté le 30-10-2003 à 16:30:14  profilanswer
 

Je n'y arrive pas , une petite aide svp.
Je recapitule:
Voici ma classe TForm5 qui est declarée dans "SimplePartie.h"

Code :
  1. class TForm5 : public TForm 
  2. private: int nombreCouleur;
  3. publicstatic int GetnombreCouleur(){return nombreCouleur;} 
  4. };

 
la variable nombreCouleur est traité dans le fichier SimplePartie.cpp  
 
voici mon main.cpp là ou je dois recuperer la valeur de la variable membre nombreCouleur.  
 

Code :
  1. #include "SimplePartie.h"
  2. TForm1 *Form1;//créé automatiquement  
  3. TForm1::TForm1(void)//contructeur
  4. {
  5.         TForm5 *maForm = new TForm5();
  6. }
  7. __fastcall TForm1::TForm1(TComponent* Owner)
  8.        : TForm(Owner)//créé automatiquement  
  9. {
  10. int essai; 
  11. maForm.GetnombreCouleur= essai;
  12. }

 
 
Et voici mon main.h ou est declaré mon constructeur et ma classe TForm1 :

Code :
  1. class TForm1 : public TForm
  2. {
  3. private:     
  4. public:         TForm1(void);
  5.         __fastcall TForm1(TComponent* Owner);//créé automatiquement
  6. };


 
Ou sont mes boulettes je suis aveugle....
 

n°554652
souk
Tourist
Posté le 30-10-2003 à 16:33:24  profilanswer
 

pour le moment, tu as declare TForm5 dans ton .h, mais tu ne l'as pas encore implemente.... :)


---------------
L'inventeur de la cédille est un certain monsieur Groçon .
mood
Publicité
Posté le 30-10-2003 à 16:33:24  profilanswer
 

n°554684
roromaino
Posté le 30-10-2003 à 16:41:45  profilanswer
 

je comprend pas ce que tu veux dire.
Tien voila mon SimplePartie.cpp
 
TForm5 *Form5;//créé automatiquement
__fastcall TForm5::TForm5(TComponent* Owner): TForm(Owner)//créé automatiquement
{
nombreCouleur=10;//par exemple
}
 
Donc je veux recuperer la valeur du membre nombreCouleur dans mon main.cpp.

n°554687
roromaino
Posté le 30-10-2003 à 16:42:28  profilanswer
 


je comprend pas ce que tu veux dire.
Tien voila mon SimplePartie.cpp

Code :
  1. TForm5 *Form5;//créé automatiquement
  2. __fastcall TForm5::TForm5(TComponent* Owner): TForm(Owner)//créé automatiquement
  3. {
  4. nombreCouleur=10;//par exemple
  5. }

 
Donc je veux recuperer la valeur du membre nombreCouleur dans mon main.cpp.

n°554695
LetoII
Le dormeur doit se réveiller
Posté le 30-10-2003 à 16:46:46  profilanswer
 

Bon heu c pas que je veux être méchant mais va t'acheter un bouquin sur le C++  :sweat:  
 


Message édité par LetoII le 30-10-2003 à 16:48:54

---------------
Le Tyran
n°554703
souk
Tourist
Posté le 30-10-2003 à 16:48:22  profilanswer
 

deja, y a un truc que je comprends pas, nombreCouleur n'est pas static et tu fais un accesseur statique, ca peut pas aller, il doit pas compiler ton SimplePartie.cpp, je me trompe ?
si je ne me trompe pas, vire le static

Code :
  1. class TForm5 : public TForm  
  2.  {  
  3.    private: int nombreCouleur;  
  4.    public:  int GetnombreCouleur(){return nombreCouleur;}  
  5.  };


Message édité par souk le 30-10-2003 à 16:48:39

---------------
L'inventeur de la cédille est un certain monsieur Groçon .
n°554707
roromaino
Posté le 30-10-2003 à 16:52:36  profilanswer
 

:pt1cable: oui en fait je l'avais changer mon simplepartie.cpp
voila le vrai:

Code :
  1. TForm5 *Form5;//créé automatiquement  
  2. __fastcall TForm5::TForm5(TComponent* Owner): TForm(Owner)//créé automatiquement  
  3. {
  4. nombreCouleur=10;//par exemple  
  5. }
  6. static int GetnombreCouleur()
  7. {
  8.         return nombreCouleur;
  9. }


 
et voici mon  simplepartie.h

Code :
  1. class TForm5 : public TForm 
  2. private: int nombreCouleur; 
  3. publicstatic int GetnombreCouleur();
  4. };

   

n°554717
souk
Tourist
Posté le 30-10-2003 à 16:58:57  profilanswer
 

y a toujours le "static" :o


---------------
L'inventeur de la cédille est un certain monsieur Groçon .
n°554720
roromaino
Posté le 30-10-2003 à 17:01:11  profilanswer
 

ok dac je le vire

n°554723
souk
Tourist
Posté le 30-10-2003 à 17:02:22  profilanswer
 

tu devrais un peu potasser la programmation objet avant d'en faire, ca peut etre utile ;)


---------------
L'inventeur de la cédille est un certain monsieur Groçon .
n°554725
roromaino
Posté le 30-10-2003 à 17:04:10  profilanswer
 

bon alors en resumé borland me fait des erreurs sur mon constructeur , comprend pas ...
 

Code :
  1. #include "SimplePartie.h" 
  2. TForm1 *Form1;//créé automatiquement   
  3. TForm1::TForm1(void)//contructeur  
  4. {
  5.        TForm5 *maForm = new TForm5();
  6. __fastcall TForm1::TForm1(TComponent* Owner) 
  7.       : TForm(Owner)//créé automatiquement   
  8. int essai; 
  9. maForm.GetnombreCouleur= essai;
  10. }

 
 
[C++ Erreur] main.cpp(18): E2251 Impossible de trouver un constructeur par défaut pour initialiser la classe de base 'TForm'
[C++ Erreur] main.cpp(19): E2285 Impossible de trouver une correspondance pour 'TForm5::TForm5()'
[C++ Erreur] main.cpp(39): E2451 Symbole 'maForm' non défini

n°554738
souk
Tourist
Posté le 30-10-2003 à 17:11:50  profilanswer
 

roromaino a écrit :

bon alors en resumé borland me fait des erreurs sur mon constructeur , comprend pas ...
 

Code :
  1. #include "SimplePartie.h" 
  2. TForm1 *Form1;//créé automatiquement   
  3. TForm1::TForm1(void)//contructeur  
  4. {
  5.        TForm5 *maForm = new TForm5();
  6. __fastcall TForm1::TForm1(TComponent* Owner) 
  7.       : TForm(Owner)//créé automatiquement   
  8. int essai; 
  9. maForm.GetnombreCouleur= essai;
  10. }

 
 
[C++ Erreur] main.cpp(18): E2251 Impossible de trouver un constructeur par défaut pour initialiser la classe de base 'TForm'
[C++ Erreur] main.cpp(19): E2285 Impossible de trouver une correspondance pour 'TForm5::TForm5()'
[C++ Erreur] main.cpp(39): E2451 Symbole 'maForm' non défini



 
desole....j'abandonne.... [:spamafote]


---------------
L'inventeur de la cédille est un certain monsieur Groçon .
n°554741
roromaino
Posté le 30-10-2003 à 17:13:29  profilanswer
 

je te remercie quand meme de ton aide j'ai avancé.

n°554744
souk
Tourist
Posté le 30-10-2003 à 17:15:14  profilanswer
 

mais serieux, prends un bouquin de programmation objet, et essaie de voir ce que c'est, la, tout ce que tu as ecrit, ca n'a aucun sens.....
 
desole d'etre dur, mais la programmation ca vient pas par magie ;)


---------------
L'inventeur de la cédille est un certain monsieur Groçon .
n°554753
roromaino
Posté le 30-10-2003 à 17:18:03  profilanswer
 

ok , je vais lire le cour de casteyde il m'a l'air pas mal

n°554755
antp
Super Administrateur
Champion des excuses bidons
Posté le 30-10-2003 à 17:18:50  profilanswer
 

tu vire tout ce qui a été dit depuis le début (comme code, pas les conseils de bouquin évidemment :D) et tu fais :
 
Form5->nombreCouleur  
:D
 
Normalement les forms sont créées automatiquement au démarrage du soft (c'est le comportement par défaut), ça se fait dans le fichier projet.cpp, où projet est le nom de ton projet


Message édité par antp le 30-10-2003 à 17:20:09

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°554767
roromaino
Posté le 30-10-2003 à 17:24:58  profilanswer
 

donc faut faire comme ca ?
 

Code :
  1. #include "SimplePartie.h" 
  2. TForm1 *Form1;//créé automatiquement   
  3. __fastcall TForm1::TForm1(TComponent* Owner) 
  4.      : TForm(Owner)//créé automatiquement   
  5. int essai;   
  6. Form5->nombreCouleur = essai; 
  7. }

 

n°554769
roromaino
Posté le 30-10-2003 à 17:25:47  profilanswer
 

ha ouais putain ca marche

n°554770
roromaino
Posté le 30-10-2003 à 17:26:19  profilanswer
 

felicitation antp mercie

n°554774
antp
Super Administrateur
Champion des excuses bidons
Posté le 30-10-2003 à 17:28:59  profilanswer
 

Il serait quand même bon que tu :
- comprennes comment marchent les classes en C++
- analyses quelles classes/objets C++Builder crée pour toi. Par ex Form5 tu peux y accéder parce que quelque part une instance de TForm5 a été créée et placée dans Form5 (qui est un pointeur, d'où le "->" ).


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°554780
roromaino
Posté le 30-10-2003 à 17:31:00  profilanswer
 

ha ok mercie

n°556027
iS@mi
Resistance is futile !
Posté le 01-11-2003 à 05:18:00  profilanswer
 

N'oublie pas d'initialiser tes pointeurs, sinon source de problème en vue !!!
 
TForm1 *Form1 = NULL; //créé automatiquement
 
Edit: et regarde dans ton livre le chapitre intitulé : L'héritage du temps :
 
http://casteyde.christian.free.fr/ [...] x2821.html


Message édité par iS@mi le 01-11-2003 à 05:20:21
n°556049
antp
Super Administrateur
Champion des excuses bidons
Posté le 01-11-2003 à 10:41:05  profilanswer
 

iS@mi a écrit :

N'oublie pas d'initialiser tes pointeurs, sinon source de problème en vue !!!
 


 
bah ici les Forms sont créés automatiquement au démarrage du soft, s'il ne touche à rien


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°556383
iS@mi
Resistance is futile !
Posté le 01-11-2003 à 17:56:48  profilanswer
 

antp a écrit :


 
bah ici les Forms sont créés automatiquement au démarrage du soft, s'il ne touche à rien


 
Dans son fichier .cpp dans le haut, il déclare le pointeur TForm1 *Form1; qui n'est visiblement pas initialisé  [:meganne]  :??:


Message édité par iS@mi le 01-11-2003 à 17:57:17
n°556385
*syl*
--> []
Posté le 01-11-2003 à 18:02:04  profilanswer
 

iS@mi a écrit :


 
Dans son fichier .cpp dans le haut, il déclare le pointeur TForm1 *Form1; qui n'est visiblement pas initialisé  [:meganne]  :??:

Form1 est déclaré en extern dans le .h

n°556424
antp
Super Administrateur
Champion des excuses bidons
Posté le 01-11-2003 à 18:51:31  profilanswer
 

iS@mi a écrit :


 
Dans son fichier .cpp dans le haut, il déclare le pointeur TForm1 *Form1; qui n'est visiblement pas initialisé  [:meganne]  :??:


 
Il a rien déclaré, c'est C++Builder qui l'a fait :D
Comme je l'ai dit les forms sont initialisées dans le fichier .cpp du nom du projet, qui contient en fait le WinMain du programme...


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


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

  gros debutant en c++ (quelque notions) Recuper variable d'une classe ?

 

Sujets relatifs
[PHP] stocker un mot de passe dans une variable de session (en clair)[debutant] [Allegro] ligne blanche [Resolut --> Bouble Buffering]
debutant:en cpp il faut aussi un destructeur dans les structs ?cherche classe qui parse l'HTML pour faire un aspirateur de site
Question variable.[Java/C] peut on mapper une structure C a une classe java??
[VB.net] Comment passer un Array String a une fonction sans variable[Caml] debutant qq questions
Comment avoir une variable avec chiffre qui varie ?vider 1 seule ligne d'un tres gros formulaire contenant X lignes?
Plus de sujets relatifs à : gros debutant en c++ (quelque notions) Recuper variable d'une classe ?


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