IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Pointeur sur ma classe issue de CDialog


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut Pointeur sur ma classe issue de CDialog
    Bonjour à tous,

    Une petite question de newbie.

    J'ai développé une petite application graphique avec visual studio 2008 .
    Je possède deux forms

    CDialog1
    CDialog2

    Sont les deux classes gérant mes boites de dialogues.


    Dans CDialog1.h je créer une donnée membre (pointeur).

    Je souhaiterai récupérer cette donnée dans mon autre classe.

    Pour se faire, il faut bien entendu que je puisse récupérer l'instance de ma Dialog1 dans ma Dialog2.

    Le soucis est que....je ne sais pas comment faire

    Je sais que cela se fait avec le constructeur ( si j'ai bien compris), mais je ne vois pas comment faire.

    Quelqu'un pourrait m'éclairer à ce sujet ?

    Merci beaucoup,

    Cordialement,

    Nixeus

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 122
    Billets dans le blog
    148
    Par défaut
    Bonjour,

    Comme il a été dis dans le chat, il se peut que ce que vous cherchez à faire vient d'un problème de design de l'application.

    Sinon pour expliquer l'histoire du constructeur:

    Dialog1.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class Dialog1
    {
        private:
            int* m_MyData;
        public:
            Dialog1();
            int* getMyData(void)const { return m_MyData; };
    };
    ( Le code du Dialog1.cpp n'est pas très important. )

    Dialog2.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class Dialog2
    {
        private:
     
            Dialog1* d1;
     
        public:
            Dialog2(const Dialog1& d1):d1(d1) {};
            void foo(void)
            {
                d1->getMyData(); // Par exemple
            }
    };
    Voilà, dans l'idée, le code qu'il faut faire.

    Sinon, il peut y avoir l'utilisation d'un Singleton ( même si on le recommande pas )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut
    Merci pour ta réponse LittleWhite.

    POur mon costructeur, celui de base est le suivant :

    CDialog1Dlg(CWnd* pParent = NULL)

    Je dois donc le transformer en :

    CDialog1Dlg(CWnd* pParent = NULL, const Dialog1& d1 ):d1(d1){};

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 122
    Billets dans le blog
    148
    Par défaut
    Ceci est faux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CDialog1Dlg(CWnd* pParent = NULL, const Dialog1& d1 ):d1(d1){};
    Pardon, c'est de ma faute.
    Le prototype sera le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CDialog1Dlg(const Dialog1& d1, CWnd* pParent = NULL )
    Car les valeurs par défault, ne peuvent être qu'à la fin du prototype.
    De plus, la liste d'initialisation
    Je pense qu'il faudrait que vous regardiez la FAQ, ou un tutoriel, disponible sur le site, pour ce sujet.

    Puis votre code ( corps de la fonction ), dans le .cpp, devra copier d1 dans le d1 de la classe.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut
    Merci beaucoup, voici donc mon constructeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CDialog1Dlg(const CTestPDADlg& accueilDlg, CWnd* pParent = NULL ):accueilDlg(accueilDlg){};
    Cependant le compilateur me dit :

    Erreur 1 error C2614: 'CDialog1Dlg'*: initialisation de membre non conforme*: 'accueilDlg' n'est ni une base ni un membre c:\users\crashoverhead\desktop\testpda\testpda\testpda\Dialog1Dlg.h 16 TestPDA


    Comment dois-je interpréter cette erreur ?

    Encore merci

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CDialog1Dlg(CTestPDADlg *accueilDlg_, CWnd* pParent = NULL )
       :CDialog(pParent),m_accueilDlg(accueilDlg_){};
    // ou
    CDialog1Dlg(CTestPDADlg &accueilDlg_, CWnd* pParent = NULL )
       :CDialog(pParent),m_accueilDlg(&accueilDlg_){};
     
    // en supposant :
    class CDialog1Dlg : public CDialog
    {
     /* [... ]*/
    CTestPDADlg *m_acceuilDlg
    };
    Ta variable membre étant un pointeur, c'est bien sûr un pointeur à passer en paramètre. Ou une référence non constante (puisque le pointeur n'est pas constant) dont tu récupères l'adresse.

    Mais comme l'a dit LittleWight, c'est un mauvais choix de design qui couple trop fortement tes deux classes et va rendre les évolutions et les corrections de bugs laborieuses.

Discussions similaires

  1. pointeur sur une classe utilisateur
    Par maa dans le forum C#
    Réponses: 15
    Dernier message: 06/07/2007, 16h25
  2. Réponses: 8
    Dernier message: 30/05/2006, 01h26
  3. [C++] pointeur sur une classe
    Par PH69 dans le forum Débuter
    Réponses: 1
    Dernier message: 21/11/2005, 22h08
  4. Réponses: 14
    Dernier message: 14/03/2005, 09h16
  5. [MFC] Problème pointeur sur une classe
    Par mick74 dans le forum MFC
    Réponses: 7
    Dernier message: 14/04/2004, 14h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo