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

C++ Discussion :

problème d'encapsulation de classes et d'accès aux méthodes


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 47
    Points : 41
    Points
    41
    Par défaut problème d'encapsulation de classes et d'accès aux méthodes
    Bonjour,

    Voici un cas d'école afin d'illustrer le plus simplement possible mon problème:

    Je rencontre des difficultés à passer un pointeur de class1 au constructeur de class2.

    L'objectif est que class2 puisse appeler une méthode de class1.


    Voici le code:

    class1.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
    15
    16
    17
    18
    19
    20
    #ifndef CLASS1_H
    #define CLASS1_H
     
    #include <iostream>
    #include "class2.h"
     
    using namespace std;
     
    class class1
    {
    public:
        class1();
     
        void methodAlpha();
     
    private:
        class2 *m_obj_class2;
    };
     
    #endif // CLASS1_H


    class1.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include "class1.h"
     
    class1::class1()
    {
        cout << "instanciated class 1!" << endl;
        m_obj_class2 = new class2(this);  // J'instancie un objet de type class2, en passant un pointeur sur class1
     
        methodAlpha();
    }
     
    void class1::methodAlpha()
    {
        cout << "class1::methodAlpha() can call class2::methodBeta()" << endl;
        m_obj_class2->methodBeta();
    }



    class2.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
    15
    16
    17
    18
    19
    20
    #ifndef CLASS2_H
    #define CLASS2_H
     
    #include <iostream>
    #include "class1.h"                  // J'inclus le prototype de class1...
     
    using namespace std;
     
    class class2
    {
    public:
        class2(class1 *parent);        // ...afin que le type soit reconnu ici
     
        void methodBeta();
     
    private:
        class1 *m_obj_class1;        // ...et ici
    };
     
    #endif // CLASS2_H


    class2.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include "class2.h"
     
    class2::class2(class1* parent)
    {
        m_obj_class1 = parent;
        cout << "instanciated class 2!" << endl;
    }
     
    void class2::methodBeta()
    {
        m_obj_class1->methodAlpha();
    }


    À la compilation, j'obtiens les deux erreurs suivantes:

    class2.h:12:19: error: expected ')' before '*' token
    class2.h:17:5: error: 'class1' does not name a type

    J'ai commenté temporairement le #include "class1.h" du fichier class2.h, juste pour voir, et j'obtiens les mêmes erreurs.
    Je pense qu'il y a un conflit avec les inclusions suivantes:
    dans class1.h > #include "class2.h".
    dans class2.h > #include "class1.h"Du coup j'ai tenté ceci en même lieu et place, c'est pareil...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    #ifndef CLASS1_H
    #define CLASS1_H
    #include "class1.h"
    #endif

    Comment procéderiez vous pour faire fonctionner ce code?



    PS: C'est étrange, habituellement je travaille avec des classes Qt (QWidget, QDialog, ...) et je suis sûr d'avoir déjà effectué des choses du genre, sans souci...

  2. #2
    Invité
    Invité(e)

Discussions similaires

  1. Réponses: 3
    Dernier message: 25/04/2014, 00h16
  2. Gestion d'objet encapsulé et accès aux méthodes.
    Par Ragnarok666 dans le forum Débuter
    Réponses: 7
    Dernier message: 13/03/2009, 14h37
  3. Accès aux méthodes privées d'une classe par la reflection
    Par Aurazed dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 07/07/2008, 15h41
  4. Problème d'accès aux méthodes d'une classe
    Par RR instinct dans le forum Langage
    Réponses: 5
    Dernier message: 26/06/2006, 14h51
  5. [TOMCAT] JSP problème d'accès aux méthodes d'une classes
    Par gunnm dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 22/05/2004, 14h02

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