Membres inscrits :599
Membres en ligne : 0
Invités en ligne : 10


|
| Conversation (Résolue) : Problème d'accès aux données. (conception surement mauvaise) |
yannp (Membre)
Inscrit le : 02-06-2010
Messages: 59
Snippets: 0
Tutoriels: 0
Hors ligne |
Bonjour.
J'ai plusieurs classes A, B, C. La classe A a pour données membres, des données à elle et des données du type B et C.
plus clairement :
Code: class B; class C; class A { public : int x; B b; C c; } Lorsque je suis dans une méthode de B ou de C, je souhaiterais avoir accès à x. Comment faire ? J'ai essayé l'héritage mais comme mes 3 classes sont déjà des classes héritières, je me retrouve avec des problèmes d'ambiguité avec wxWindow ... etc .. Merci pour votre aide.
Yann
| |
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1147
Snippets: 23
Tutoriels: 6
Site web
Hors ligne |
Salut.
Une possibilité assez simple serait de passer un pointeur (ou une référence) vers la classe A lors de la construction de B et C.
Par exemple :
Code Cpp:class A; class B { public: B(A& parent); private: A& m_parent; }; class A { public: int x; B b; }; B::B(A& parent) : m_parent(parent) { // Constructeur de la classe B m_parent.x=0; }
C'est juste un exemple, mais normalement, ça devrait marcher.
@+ Xav'
|
Le nouveau portail wxWidgets francophone : www.wxdev.fr Ben en fait, vous y êtes déjà...
|
yannp (Membre)
Inscrit le : 02-06-2010
Messages: 59
Snippets: 0
Tutoriels: 0
Hors ligne |
Merci. J'ai encore un petit souci ... (j'abuse)
Code: class winComposition : public wxMDIChildFrame { ... partition * AffichagePartition; } class partition : public wxScrolledWindow { public: partition(wxWindow *parent, wxWindowID winid = wxID_ANY, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxScrolledWindowStyle, const wxString& name = wxPanelNameStr, winComposition &argWinComposition= NULL); void OnDraw( wxDC &dc ); private: winComposition &pWinComposition; }; Dans les constructeurs j'ai :
Code: winComposition::winComposition(wxMDIParentFrame *parent, const wxString& title) : wxMDIChildFrame(parent, wxID_ANY, title, wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE | wxNO_FULL_REPAINT_ON_RESIZE) { AffichagePartition = new partition ( m_panel45, WINDOWS_COMPOSITION_SCROLLBAR, wxDefaultPosition, wxDefaultSize, 0, *this ); }
Code: partition::partition ( wxWindow *parent, wxWindowID winid, const wxPoint& pos, const wxSize& size, long style, const wxString& name, winComposition &argWinComposition) : wxScrolledWindow(parent, winid, pos, size, style, name) : pWinComposition (argWinComposition) { } A la compilation j'ai l'erreur suivante :
Code: C:\Documents and Settings\yannp\Mes documents\Perso\Developpement\wx\YAPE_Music\windowsComposition.cpp|47|error: no matching function for call to `partition::partition(wxPanel*&, int, const wxPoint&, const wxSize&, int, winComposition&)'| C:\Documents and Settings\yannp\Mes documents\Perso\Developpement\wx\YAPE_Music\windowsComposition.h|44|note: candidates are: partition::partition(const partition&)| C:\Documents and Settings\yannp\Mes documents\Perso\Developpement\wx\YAPE_Music\windowsComposition.h|48|note: partition::partition(wxWindow*, wxWindowID, const wxPoint&, const wxSize&, long int, const wxString&, winComposition&)| C:\Documents and Settings\yannp\Mes documents\Perso\Developpement\wx\YAPE_Music\windowsComposition.cpp|209|error: uninitialized reference member `partition::pWinComposition'| C:\Documents and Settings\yannp\Mes documents\Perso\Developpement\wx\YAPE_Music\windowsComposition.cpp|209|error: expected `{' before ':' token| C:\Documents and Settings\yannp\Mes documents\Perso\Developpement\wx\YAPE_Music\windowsComposition.cpp|209|error: expected unqualified-id before ':' token| C:\Documents and Settings\yannp\Mes documents\Perso\Developpement\wx\YAPE_Music\windowsComposition.cpp|224|error: base operand of `->' has non-pointer type `winComposition'| C:\Documents and Settings\yannp\Mes documents\Perso\Developpement\wx\YAPE_Music\windowsComposition.cpp|224|error: `zoom' was not declared in this scope| C:\Documents and Settings\yannp\Mes documents\Perso\Developpement\wx\YAPE_Music\windowsComposition.cpp|224|warning: unused variable 'zoom'| C:\Documents and Settings\yannp\Mes documents\Perso\Developpement\wx\YAPE_Music\windowsComposition.cpp|220|warning: unused variable 'x'| C:\Documents and Settings\yannp\Mes documents\Perso\Developpement\wx\YAPE_Music\windowsComposition.cpp|220|warning: unused variable 'y'| ||=== Build finished: 8 errors, 3 warnings ===| Merci pour toute ton aide...
Yann
Dernière modification par yannp (01-07-2010 15:12:28)
| |
|
Sem (Membre)
Inscrit le : 31-05-2008
Messages: 64
Snippets: 0
Tutoriels: 0
Hors ligne |
bonjour,
Code Cpp: partition::partition ( wxWindow *parent, wxWindowID winid, const wxPoint& pos, const wxSize& size, long style, const wxString& name, winComposition &argWinComposition) : wxScrolledWindow(parent, winid, pos, size, style, name), pWinComposition (argWinComposition) { } ce sont des virgules.
exemple :
Code Cpp:class FiatPanda : public Voiture { public: FiatPanda(Propriétaire &prop); private: Volant m_Volant; Roues m_Roues; Chassi m_Chassi; Moteur m_Moteur; Propriétaire m_Propriétaire; }; FiatPanda::FiatPanda(Propriétaire prop) : Voiture("petite","fiat","panda"), m_Volant(1), m_Roues(4), m_Chassi("rouillé", 1), m_Moteur(999), m_Proprietaire(prop) { m_Moteur.PrierPourQuilDemarre(); m_Moteur.Demarrer(); ... }
C'est un exemple mais c'est l'idée, Sem
| |
|
yannp (Membre)
Inscrit le : 02-06-2010
Messages: 59
Snippets: 0
Tutoriels: 0
Hors ligne |
Ok merci, ca marche nickel.
Yann
| |
|
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1147
Snippets: 23
Tutoriels: 6
Site web
Hors ligne |
Sem a écrit:... ce sont des virgules. ... C'est un peu de ma faute : j'ai eut la flemme de pousser l'exemple avec plusieurs classes : j'aurais dû le faire.
@+ Xav'
|
Le nouveau portail wxWidgets francophone : www.wxdev.fr Ben en fait, vous y êtes déjà...
|
|