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

  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 196
    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 196
    Billets dans le blog
    159
    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 196
    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 196
    Billets dans le blog
    159
    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.

  7. #7
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut
    Merci de m'avoir répondu !

    Honnetement, je suis complètement perdu entre mon header et mon cpp....

    J'avais oublié que c++ demandait autant de rigueur.



    Penses tu que si j'adapte mon programme avec une classe "fabricateur" ( mon prof de BTS appelais ca comme cela), ça puisse faciliter les choses ?

  8. #8
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    281
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 281
    Par défaut
    Une corde les amiiiiiis J'en peux plus

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 401
    Par défaut
    Pour te sortir du gouffre ou pour te pendre?

    Es-tu sûr, pour commencer, qu'il n'y a aucun lien de parenté entre tes deux boîtes de dialogue?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

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

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