prob de declaration

prob de declaration - C++ - Programmation

Marsh Posté le 30-04-2005 à 00:30:01    

voila j'ai un prob de declaration et je sais pas d'ouca vien c'est sur les lignes 20
 
 
 

Code :
  1. #if !defined(AFX_IHM_PCCONTROL_H__33B71AB2_EAB0_4DEB_BE09_EED7E700FEE1__INCLUDED_)
  2. #define AFX_IHM_PCCONTROL_H__33B71AB2_EAB0_4DEB_BE09_EED7E700FEE1__INCLUDED_
  3. #include "horloge.h"
  4. #include "GestionSelfDlg.h"
  5. #if _MSC_VER > 1000
  6. #pragma once
  7. #endif // _MSC_VER > 1000
  8. // IHM_PcControl.h : header file
  9. //
  10. /////////////////////////////////////////////////////////////////////////////
  11. // CIHM_PcControl dialog
  12. class CGestionSelfDlg;
  13. class CIHM_PcControl : public CDialog
  14. {
  15. // Construction
  16. public:
  17. CGestionSelfDlg m_SelfDlg;
  18. void AfficheNonValide();
  19. void AfficheRegime(CString strRegime);
  20. void AffichePrenom(CString strPrenom);
  21. void AfficheNom(CString strNom);
  22. void AfficheAutorise();
  23. CIHM_PcControl(CWnd* pParent = NULL);   // standard constructor
  24. void AffichePlageHoraire(CString strPlageMin, CString strPlageMax);
  25. void HorsPlageHoraire();
  26. // Dialog Data
  27. //{{AFX_DATA(CIHM_PcControl)
  28. enum { IDD = IDD_PCCONTROLE_DIALOG };
  29.  // NOTE: the ClassWizard will add data members here
  30. //}}AFX_DATA
  31. // Overrides
  32. // ClassWizard generated virtual function overrides
  33. //{{AFX_VIRTUAL(CIHM_PcControl)
  34. protected:
  35. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  36. //}}AFX_VIRTUAL
  37. // Implementation
  38. protected:
  39. // Generated message map functions
  40. //{{AFX_MSG(CIHM_PcControl)
  41. afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
  42. virtual BOOL OnInitDialog();
  43. afx_msg void OnTimer(UINT nIDEvent);
  44. afx_msg void PassageAutorise();
  45. afx_msg void CarteNonValide();
  46. afx_msg void HorsPlage();
  47. //}}AFX_MSG
  48. DECLARE_MESSAGE_MAP()
  49. private:
  50. //CHorloge mClock;
  51. };
  52. //{{AFX_INSERT_LOCATION}}
  53. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  54. #endif // !defined(AFX_IHM_PCCONTROL_H__33B71AB2_EAB0_4DEB_BE09_EED7E700FEE1__INCLUDED_)


 
et 23

Code :
  1. #if !defined(AFX_IHM_PCCONTROL_H__33B71AB2_EAB0_4DEB_BE09_EED7E700FEE1__INCLUDED_)
  2. #define AFX_IHM_PCCONTROL_H__33B71AB2_EAB0_4DEB_BE09_EED7E700FEE1__INCLUDED_
  3. #include "horloge.h"
  4. #include "GestionSelfDlg.h"
  5. #if _MSC_VER > 1000
  6. #pragma once
  7. #endif // _MSC_VER > 1000
  8. // IHM_PcControl.h : header file
  9. //
  10. /////////////////////////////////////////////////////////////////////////////
  11. // CIHM_PcControl dialog
  12. class CGestionSelfDlg;
  13. class CIHM_PcControl : public CDialog
  14. {
  15. // Construction
  16. public:
  17. CGestionSelfDlg m_SelfDlg;
  18. void AfficheNonValide();
  19. void AfficheRegime(CString strRegime);
  20. void AffichePrenom(CString strPrenom);
  21. void AfficheNom(CString strNom);
  22. void AfficheAutorise();
  23. CIHM_PcControl(CWnd* pParent = NULL);   // standard constructor
  24. void AffichePlageHoraire(CString strPlageMin, CString strPlageMax);
  25. void HorsPlageHoraire();
  26. // Dialog Data
  27. //{{AFX_DATA(CIHM_PcControl)
  28. enum { IDD = IDD_PCCONTROLE_DIALOG };
  29.  // NOTE: the ClassWizard will add data members here
  30. //}}AFX_DATA
  31. // Overrides
  32. // ClassWizard generated virtual function overrides
  33. //{{AFX_VIRTUAL(CIHM_PcControl)
  34. protected:
  35. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  36. //}}AFX_VIRTUAL
  37. // Implementation
  38. protected:
  39. // Generated message map functions
  40. //{{AFX_MSG(CIHM_PcControl)
  41. afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
  42. virtual BOOL OnInitDialog();
  43. afx_msg void OnTimer(UINT nIDEvent);
  44. afx_msg void PassageAutorise();
  45. afx_msg void CarteNonValide();
  46. afx_msg void HorsPlage();
  47. //}}AFX_MSG
  48. DECLARE_MESSAGE_MAP()
  49. private:
  50. //CHorloge mClock;
  51. };
  52. //{{AFX_INSERT_LOCATION}}
  53. // Microsoft Visual C++ will insert additional declarations immediately before the previous line.
  54. #endif // !defined(AFX_IHM_PCCONTROL_H__33B71AB2_EAB0_4DEB_BE09_EED7E700FEE1__INCLUDED_)


 
 
 
merci d'avance

Reply

Marsh Posté le 30-04-2005 à 00:30:01   

Reply

Marsh Posté le 30-04-2005 à 01:03:51    

Salut,

Code :
  1. #include "GestionSelfDlg.h"
  2. ...
  3. class CGestionSelfDlg;


Pourquoi redéclarer une classe incluse ?
Soit tu utilises les forward déclarations, qui ne peuvent être utilisées qu'avec des pointeurs et donc tu modifies

Code :
  1. CGestionSelfDlg m_SelfDlg

en

Code :
  1. CGestionSelfDlg *m_SelfDlg

et tout le code de ton .cpp. Soit tu vires ladite déclaration.

Reply

Marsh Posté le 30-04-2005 à 09:24:11    

ben disons que la pre declaratin des classes mon prof m'en avait parlé en cas de probleme mais la ca marche pas et a paet un pointeur y a pas d'autre solution

Reply

Marsh Posté le 30-04-2005 à 09:27:36    

ben en mettant un pointeur en faite j'ai pluis de prob a la compilation mais a l'execution c'est un carnage access violation

Reply

Marsh Posté le 30-04-2005 à 14:45:40    

L'intérêt des forward declarations, c'est de gagner du temps à la compilation.
Je m'explique : ton compilateur compilera tout les .cpp modifiés. Si tu modifies un header, tout les .cpp qui l'incluent seront donc recompilés. Ce qui revient à dire que si tu modifies GestionSelfDlg.h qui est inclus par IHM_PcControl.h, le code de GestionSelfDlg.cpp (s'il s'appelle comme ça) sera recompilé (normal). Mais, IHM_PcControl.h aura aussi été modifié et donc IHM_PcControl.cpp (s'il s'appelle comme ça encore une fois) sera aussi recompilé, ce qui est normal aussi puisqu'il utilise CGestionSelfDlg.
Là où ça devient génant, c'est lorsque IHM_PcControl.h est inclus dans d'autre fichiers (h ou cpp). La recompilation de ces fichiers deviendra obligatoire alors qu'il n'utilise peut-être pas ton instance de CGestionSelfDlg. D'où un suplément de temps de compilation inutile.
Alors que si tu utilises la forward declaration, tu dois déclarer un pointeur (et donc bien sûr l'allouer et le libérer quand il faut). Cette manip fait en sorte que tu n'ait pas à recompiler des fichiers qui ne devrait pas l'être.
 
J'espère que cette explication n'est pas un "plat de spaghetti" et que c'est à peu près clair...

Reply

Marsh Posté le 30-04-2005 à 23:09:19    

je veux bien mais a part ralentir la comppilation ca exprique aps pourquoi ca marche pas
 
 
le message d'erreur exacte est :
Compiling...
GestionSelf.cpp
d:\programmation\c++\msdev98\myprojects\gestionself\ihm_pccontrol.h(23) : error C2079: 'm_SelfDlg' uses undefined class 'CGestionSelfDlg'
GestionSelfDlg.cpp
d:\programmation\c++\msdev98\myprojects\gestionself\ihm_pccontrol.h(23) : error C2079: 'm_SelfDlg' uses undefined class 'CGestionSelfDlg'
IHM_PcControl.cpp
d:\programmation\c++\msdev98\myprojects\gestionself\gestionselfdlg.h(27) : error C2079: 'm_PcControlDlg' uses undefined class 'CIHM_PcControl'
Generating Code...
Error executing cl.exe.
 
GestionSelf.exe - 3 error(s), 0 warning(s)
 
 
 :cry:  :sweat:


Message édité par dreamkiller le 30-04-2005 à 23:11:23
Reply

Marsh Posté le 01-05-2005 à 11:37:39    

a chaque fois que je rajoute un objet de type CGestionSelfDlg dans une autre classe ca me rajoute 3erreur et apres meme en suprimant l'objet impossible de supprimer toutes les erreurs

Reply

Marsh Posté le 01-05-2005 à 12:24:41    

Citation :

[C++] prob de declaration


 

Code :
  1. std::cout<<"Marlene, je vous aime\n";


 
et vala, une fort belle déclaration en C++ [:god]
 
ne me remercie pas [:klem3i1]


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 01-05-2005 à 12:26:48    

bon, sinon, ton pb c'est que tu fais une forward declaration de CGestionSelfDlg (soit tno class CGestionSelfDlg; ), ce que tu as le droit de faire, mais ensuite tu instancie un objet de ce type, ce que tu n'as pas le droit de faire car le compilo ne connait pas la taille de l'objet a ce moment la
 
Apres une forward, tu peux declarer des pointeurs sur ton type (bzw pointeur de pointeur..) et ds references, mais tu ne peux pas allouer un objet de ce type (ce que tu fais la)
 
Donc au lieu de faire class CGestionSelfDlg;, le mieux c'est de faire un bete #include "lefichierquidefinit CGestionSelfDlg"


Message édité par chrisbk le 01-05-2005 à 12:27:02

---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 01-05-2005 à 12:31:47    

je veux bien mais #include "lefichierquidefinit CGestionSelfDlg" je l'ai deja mis c'est le #include "GestionSelfDlg.h" nan

Reply

Marsh Posté le 01-05-2005 à 12:31:47   

Reply

Marsh Posté le 01-05-2005 à 12:35:51    

Bon jcrois que tu nous a montré deux fois le meme code non ? et au vu de ets messages d'erreurs, je crois que t'as un fichier A qui inclue B, et B qui inclue aussi A, ce qui ne va pas


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 01-05-2005 à 12:41:11    

ben c'est exactement ca j'ai deux classe A et B.
Dans la classe A j'ai un objet de la classe B et dans la classe B j'ai un objet de la claase A
 

Code :
  1. Class A
  2. {
  3.    B objet_b;
  4. }
  5. Class B
  6. {
  7.    A objet_a;
  8. }


voila en gros cs que je veux faire mais j'y arrive pas :sweat:

Reply

Marsh Posté le 01-05-2005 à 12:46:24    

bin ca tu peux tout betement pas, vu que ca fait des objets d'une taille infinie.  
 
t'as un gros pb de conception


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 01-05-2005 à 12:50:41    

ben en faite je savais pas que c'etait impossible et mer.. :cry:  :cry:  :cry:  
bon ben on reprend la phase d'analyse :sweat:  
merci quand meme
 :jap:

Reply

Marsh Posté le 01-05-2005 à 13:00:16    

dreamkiller a écrit :

ben en faite je savais pas que c'etait impossible et mer.. :cry:  :cry:  :cry:  


 
et ca c'est possible ?

Code :
  1. class A
  2. {
  3.     A objet_a;
  4. }

Reply

Marsh Posté le 01-05-2005 à 13:00:50    

bin non plus, objet de taille infinie
 
fo passer des ptrs


---------------
NP: HTTP Error 764 Stupid coder found
Reply

Marsh Posté le 01-05-2005 à 13:04:25    

chrisbk a écrit :

bin non plus, objet de taille infinie
 
fo passer des ptrs


 
 
c'etait de l'ironie :D, dans le meme genre (pour moi c'est la mem chose)

Reply

Marsh Posté le 01-05-2005 à 13:06:52    

j'ai comme l'impression qu il y a du foutage de gueulle y en a qui on jamais fait d'erreur et qui savait tous des le debut  :pfff:

Reply

Marsh Posté le 01-05-2005 à 13:08:41    

ouai excuse moi

Reply

Sujets relatifs:

Leave a Replay

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