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

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

Marsh Posté le 29-10-2003 à 23:47:27    

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:

Reply

Marsh Posté le 29-10-2003 à 23:47:27   

Reply

Marsh Posté le 30-10-2003 à 00:15:50    

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

Reply

Marsh Posté le 30-10-2003 à 00:29:32    

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

Reply

Marsh Posté le 30-10-2003 à 09:14:52    

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
Reply

Marsh Posté le 30-10-2003 à 12:28:53    

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

Reply

Marsh Posté le 30-10-2003 à 14:45:39    

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...  
 
 
 

Reply

Marsh Posté le 30-10-2003 à 15:19:10    

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()'

Reply

Marsh Posté le 30-10-2003 à 15:52:48    

Avec un constructeur c mieux


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

Marsh Posté le 30-10-2003 à 16:30:14    

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....
 

Reply

Marsh Posté le 30-10-2003 à 16:33:24    

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

Marsh Posté le 30-10-2003 à 16:33:24   

Reply

Marsh Posté le 30-10-2003 à 16:41:45    

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.

Reply

Marsh Posté le 30-10-2003 à 16:42:28    


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.

Reply

Marsh Posté le 30-10-2003 à 16:46:46    

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
Reply

Marsh Posté le 30-10-2003 à 16:48:22    

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

Marsh Posté le 30-10-2003 à 16:52:36    

: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. };

   

Reply

Marsh Posté le 30-10-2003 à 16:58:57    

y a toujours le "static" :o


---------------
L'inventeur de la cédille est un certain monsieur Groçon .
Reply

Marsh Posté le 30-10-2003 à 17:01:11    

ok dac je le vire

Reply

Marsh Posté le 30-10-2003 à 17:02:22    

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

Marsh Posté le 30-10-2003 à 17:04:10    

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

Reply

Marsh Posté le 30-10-2003 à 17:11:50    

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

Marsh Posté le 30-10-2003 à 17:13:29    

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

Reply

Marsh Posté le 30-10-2003 à 17:15:14    

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

Marsh Posté le 30-10-2003 à 17:18:03    

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

Reply

Marsh Posté le 30-10-2003 à 17:18:50    

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
Reply

Marsh Posté le 30-10-2003 à 17:24:58    

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. }

 

Reply

Marsh Posté le 30-10-2003 à 17:25:47    

ha ouais putain ca marche

Reply

Marsh Posté le 30-10-2003 à 17:26:19    

felicitation antp mercie

Reply

Marsh Posté le 30-10-2003 à 17:28:59    

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
Reply

Marsh Posté le 30-10-2003 à 17:31:00    

ha ok mercie

Reply

Marsh Posté le 01-11-2003 à 05:18:00    

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
Reply

Marsh Posté le 01-11-2003 à 10:41:05    

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
Reply

Marsh Posté le 01-11-2003 à 17:56:48    

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
Reply

Marsh Posté le 01-11-2003 à 18:02:04    

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

Reply

Marsh Posté le 01-11-2003 à 18:51:31    

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
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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