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 :

Imbrication de class


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Par défaut Imbrication de class
    Voici mon petit pb : j'aimerai definir une class dans une autre.
    Facile si on met tout dans le .h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class A 
    {
        class B
        {
            int m_memb;
         public:
            B(int i) : m_memb(i) {}
        };
        B m_b;
    public:
        A() {}
    };
    Maintenant si on veut separrer les definitions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class A{
         class B;
    public:
         A();
    };
    class A::B {
         int m_memb;
    public:
         B(int i) : m_memb(i) {}
    };
    Sa marche tjrs mais si on rajoute le membre B m_b :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class A{
         class B;
         B m_b;
    public:
         A();
    };
    class A::B {
         int m_memb;
    public:
         B(int i) : m_memb(i) {}
    };
    Le compilo me dit que la class B est indefinis, mais cela fonctionne si je declare ce membre comme pointeur : B *m_b;

    J'aimerai savoir si je suis obligé de le declarer en pointeur, ou d'ecrire la definitions de ma class B dans la class A.

    J'ai trouvé que tres peu d'info sur l'imbrication de class sur le net, merci de bien vouloir m'aider

  2. #2
    Membre émérite Avatar de Caine
    Inscrit en
    Mai 2004
    Messages
    1 028
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 028
    Par défaut
    Bonjour,
    Essai comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    class B; 
     
    class A{ 
         B m_b; 
    public: 
         A(); 
    }; 
    class A::B { 
         int m_memb; 
    public: 
         B(int i) : m_memb(i) {} 
    };

  3. #3
    Membre chevronné Avatar de themadmax
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    446
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 446
    Par défaut
    Merci mais sa ne marche pas :
    error C2039: 'B' : is not a member of 'A'

  4. #4
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Pas possible:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class A{ 
         class B; 
         B m_b;
    tu utilise B qui est inconnu à cet endroit. Tu peux utiliser un pointeur, mais pas une instance. Ou bien il faut déclarer B comme dans ton 1° exemple.
    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
     
    class A 
    { 
        class B 
        { 
            int m_memb; 
         public: 
            B(int i=0);
        }; 
        B m_b; 
    public: 
        A() {} 
    };
     
    A::B::B(int i) : m_memb(i) {}
    voir aussi:
    http://c.developpez.com/faq/cpp/?pag...erence_croisee

  5. #5
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 545
    Par défaut
    je ne comprends pas trop ton probleme ... et les solutions proposees.

    si tu veux que B soit une sous classe de A, alors tu dois la définir dans A ... ou inventer une autre syntaxe et reecrire le compilateur !

    maintenant la vraie question est pourquoi, l'imbrication de B dans A est un moyen pas un but
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 94
    Par défaut
    Citation Envoyé par bruno_pages
    si tu veux que B soit une sous classe de A, alors tu dois la définir dans A
    En fait, on ne peut pas mettre une instance de B dans A car la taille d'un objet B est inconnue si B n'est que déclarée (pas définie).

    J'espère que cette précision t'aura éclairé
    Kwakanar

Discussions similaires

  1. imbrication de classe et arraylist
    Par greg08 dans le forum Collection et Stream
    Réponses: 15
    Dernier message: 10/11/2009, 20h55
  2. Imbrication de classe C++
    Par OXXYGENE dans le forum C++
    Réponses: 2
    Dernier message: 28/04/2009, 02h30
  3. Imbrication de classes
    Par tedori dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 05/04/2009, 18h08
  4. probleme imbrication des classes
    Par touane dans le forum ActionScript 3
    Réponses: 3
    Dernier message: 04/12/2007, 15h14
  5. [POO] Imbrication de classes
    Par warrios dans le forum Langage
    Réponses: 1
    Dernier message: 07/09/2007, 00h11

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