2 classes --> utiliser les memes objets; [Résolu]

Messages postés
688
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
2 juin 2006
- - Dernière réponse : xterminhate
Messages postés
371
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
23 septembre 2009
- 11 sept. 2005 à 22:26
Bonjour,

Je dev une appli qui contient 2 classes;
une classe de ma frame principale et une petite classe amie qui est un dialog, qui contient un event bouton.

le code :

////Dialog Style Start
#define THIS_DIALOG_STYLE wxCAPTION | wxSYSTEM_MENU | wxDIALOG_NO_PARENT | wxMINIMIZE_BOX | wxMAXIMIZE_BOX | wxCLOSE_BOX | wxRESIZE_BORDER


#undef CommandDialog_STYLE
#define CommandDialog_STYLE wxCAPTION | wxMINIMIZE_BOX | wxCLOSE_BOX | wxOK
////Dialog Style End
/*
Frame
*/
class FTPclientFrm : public wxFrame
{
private:

DECLARE_EVENT_TABLE()

public: FTPclientFrm( wxWindow *parent, wxWindowID id 1, const wxString &title _T("FTPclient"),
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = THIS_DIALOG_STYLE);
~FTPclientFrm();
friend class CommandDialog;
////GUI Control Declaration Start
public :
wxFTP *ftp;
CommandDialog *m_comDialog;
public :
enum
{
////GUI Enum Control ID Start
ID_STCMD = 1031 ,
ID_COMDIALOG = 1030 ,,
////GUI Enum Control ID End


ID_DUMMY_VALUE_ //Dont Delete this DummyValue
}; //End of Enum;
void FTPclientFrmClose(wxCloseEvent &event);
void CreateGUIControls();
public :
void connect();
void result();
};
/*
Dialogue envoie de commandes
*/
class CommandDialog : public wxDialog
{
public: CommandDialog( wxWindow *parent, wxWindowID id 1, const wxString &title wxT("CommandDialog"),
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = CommandDialog_STYLE);
~CommandDialog();

wxButton *ButtonEnvoyer;
wxTextCtrl *EditCommand;
wxStaticText *StaticTextCommand;
private:
DECLARE_EVENT_TABLE()


public:
enum
{
////GUI Enum Control ID Start
ID_BUTTONENVOYER = 2003,
ID_EDITCOMMAND = 2002,
ID_COMMANDSTATICTEXT = 2001,
////GUI Enum Control ID End
ID_DUMMY_VALUE_ //Dont Delete this DummyValue
}; //End of Enum
void CommandDialogClose(wxCloseEvent& event);
void CreateGUIControls(void);
void envoyerClick(wxCommandEvent &event);
};

Voila, ben en fait, je veux utiliser le pointeur wxFTP *ftp; qui est initialisé dans une fonction membre de FTPclientFrm, dans CommandDialog.

Ou alors, ca me semble plus "développeur" d' appeller une fonction membre de FTPclientFrm à partir de la fonction envoyerClick(event); qui est membre de CommandDialog;

Donc, avec ce code j' arrive à utiliser des fonctions membres de CommandDialog à partir de FTPclientFrm mais pas à utiliser les fonctions de FTPclientFrm à partir de CommandDialog et l' inverse;


event.Merci();
@+;
ROOT_DIEU Alias satellite34
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
371
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
23 septembre 2009
3
Merci
struct et class permettent de faire des objets en C++.

Tu dois passer au constructeur de CommandDialogue le pointeur de wxFTP créé à partir de ton objet frame. Cela te permet de partager le même objet wxFTP entre la frame et la boite de dialogue.

Maintenant, l'histoire d'appeller une fonction membre de frame à partir de ta boite de dialogue montre seulement un défaut dans la conception orientée objet de ton applicaiton. Divise ta classe frame pour te faciliter la tache et partage les différentes instances entre la frame et la boite de dialogue....

C'est Xterm, comme la console UNIX.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 131 internautes nous ont dit merci ce mois-ci

Commenter la réponse de xterminhate
Messages postés
371
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
23 septembre 2009
0
Merci
Le pointeur est initialisé dans la classe dériviée wxFrame et utilisé dans la classe dérivée wxDialog.

Passe ce pointeur à l'instance dériviée de wxDialog par l'intermédiaire de son constructeur.

Je vois pas le probleme....
Commenter la réponse de xterminhate
Messages postés
688
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
2 juin 2006
1
0
Merci
bonjour,

désolé mais je ne saisi pas bien le :

"Passe ce pointeur à l'instance dériviée de wxDialog par l'intermédiaire de son constructeur"

ca revient à faire quoi???reconstruire l' objet dans wxDialog????
car si c'est ca, déja essayé et vu que ce n' est pas le meme objet mais un nouvo, ac ne marche pas, enfin , 0 erreurs de compile mais ma fonction travaille sur une autre instance que celle affichée a l' user..

Merci de préciser, je suis débutant !Et pas de support tel que livre ou autre (encore)


event.Merci();
@+;
ROOT_DIEU Alias satellite34
Commenter la réponse de cs_satellite34
Messages postés
688
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
2 juin 2006
1
0
Merci
Bonsoir,

Bon, je vais éclaircir mon affaire car c'est clair que c' est pas clair;lol;

donc, en premier lieu j' ai 2 classes(héhé);
1-->FTPclientFrm 2--->CommandDialog

CommandDialog est l' amie de FTPclientFrm, pour la création d' un dialog a partir d' un évenement de FTPclientFrm;Jusque la c' est ok;

J' ai une fonction membre de CommandDialog qui récupere une chaine de caracteres dans textCtrl :

wxString CommandDialog::command()
{
wxString cmd = EditCommand->GetValue();
return cmd;
}

C 'est la que je ne sais plus ou donner de la tetine :
Dans FTPclientFrm, j' ai une fonction membre qui envoi une commande ftp via un objet wxFTP *ftp en utilisant la fonction command() qui est membre de CommadDialog, ca ca marche bien :
void FTPclientFrm::send()
{
wxString com = m_comDialog->EditCommand->GetValue();
ftp->SendCommand(com);
result();
}

Dans CommandDialog il y a un bouton avec une fonction
void envoyerClick(wxCommandEvent &event);

De cette fonction, il faut que j' appelle send(); qui est membre de FTPclientFrm;
C' est ceci que je n' arrive pas a faire;

Est-ce que j' emploi la bonne méthode??Comment faire;àààà l' aideeeeee !


event.Merci();
@+;
ROOT_DIEU Alias satellite34
Commenter la réponse de cs_satellite34
Messages postés
371
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
23 septembre 2009
0
Merci
struct CommandDialog
{
CommandDialog( wxFTP* ftp )
private:
wxFTP* ftp; // lien vers l'objet wxFtp initialisé dans FTPclientFrm.
}
Commenter la réponse de xterminhate
Messages postés
688
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
2 juin 2006
1
0
Merci
Alors la, vraiment je surnage pourquoi struct alors que j' ai déja une classe nommée CommandDialog???J' ai essayé quand meme de mettre dans ma classe CommandDialog :

CommandDialog( wxFTP* ftp )
private:
wxFTP* ftp; // lien vers l'objet wxFtp initialisé dans FTPclientFrm.

que j' utilise dans la fonction envoyerClick(wxCommandEvent& event);
ftp->SendCommand(command());
donc, ca plante, normal tu m' dira l' objet n' est pas créé mais si je fais un new, boum!, je suis plus sur le meme objet wxFTP;

Et puis, moi, ce que je veux faire, la, c'est utiliser une fonction membre de FTPclientFrm à partir de CommandDialog, pas utiliser un objet;

Quand on connai pas, Du code sans explications ca sert un peu à rien, je me doute que le temps est un précieux énnemi, mais bon, j' aurai préféré un peux d' expliks a la place d' un morceau de code;; erf, merci kan meme xther. mais la, je supernage;mdr

event.Merci();
@+;
ROOT_DIEU Alias satellite34
Commenter la réponse de cs_satellite34