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 :

des classes qui se mordent la queue


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 133
    Par défaut des classes qui se mordent la queue
    bonjour.

    je suis confronté à un petit problème ...

    je cherche à faire une structure de données un peu spéciale : en gros c'est comme un arbre, mais chaque noeud est une instance de classe N et chacune de ces instances contient un tableau d'instances de classe C. et dans cette classe C j'ai une variable privée de type N.

    je ne sais pas si vous voyez le truc, schématiquement imaginez vous un noeud, contenant un tableau, et chaque case de ce tableau contient un objet pointant vers un nouveau noeud.
    j'ai donc une classe pour les noeuds, et une pour les éléments des tableaux.

    je n'ai pas réussi à définir les classes vu qu'elles ont chacune besoin de l'autre.

    j'ai cherché sur internet et j'ai trouvé des choses qui ne marchent pas, au sujet d'anticipation de déclaration de classes ...

    pouvez-vous m'aider à définir mes 2 classes svp ?

  2. #2
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class C;
     
    class N
    {
       C tab[n];
    };
     
    class C
    {
       N obj;
    };
    Tu parles de ça ? Je pense que ça devrait compiler, l'astuce résidant dans la déclaration anticipée de la classe C.

    Je ne certifie pas que ça compile .

    EDIT : hay j'ai vu que tu avais déjà testé la déclaration anticipée...

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par défaut
    Ce code appelle implicitement le constructeur par défaut de la classe C, il faut donc qu'elle soit déjà définie, ce qui n'est pas le cas.

    Ici il va falloir employer des pointeurs pour pouvoir faire fonctionner le mécanisme de déclaration anticipée.

    Si tu pouvais nous montrer plus précisément le code que tu as essayé et qui plante, ça permettrait de te donner un peu plus de renseignements

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 133
    Par défaut
    ok pour l'instant je n'ai rien codé à part des test de déclaration de classes. j'ai testé ça :

    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
    21
    22
    23
    24
    typedef unsigned short int entier;
     
    class CCoup
    {
      private :
        entier Dx : 3;
        entier Dy : 3;
        entier Ax : 3;
        entier Ay : 3;
        entier PromPP : 3;
        entier PromOuPP : 1;
        CNoeud Noeud;
      public :
        CCoup();
        CCoup(entier dx,entier dy,entier ax,entier ay);
        CCoup(entier dx,entier dy,entier ax,entier ay, entier prompp, entier promoupp);
        //void test();
    };
     
    class CNoeud
    {
      private :
        CCoup TabCoups[];
    };

  5. #5
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par défaut
    ok donc c'est bien ce que je disais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class CCoup
    {
      private :
        //Autres déclarations ...
        CNoeud Noeud; //<= cette ligne nécessite que la classe CNoeud soit déjà définie, ce qui n'est pas le cas
     
        //suite de la classe ...
    };
    Donc il faut que tu remplaces ta déclaration par un pointeur ou un référence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    class CNoeud;
     
    class CCoup
    {
    private:
        //Autres déclarations ...
        CNoeud* Noeud;
     
        //suite de la classe ...
    };
    Et là la déclaration anticipée fonctionne.

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 133
    Par défaut
    merci beaucoup, ça fonctionne !

    je suis sur un programme assez ambitieux pour un mec qui fait du C/C++ depuis 2 semaines mais si je réussis je reviendrai ici le donner.
    c'est parti pour au moins 1 mois de boulot !

    tag résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. compiler des classes qui en importe d'autre
    Par bogizo dans le forum Débuter avec Java
    Réponses: 10
    Dernier message: 28/08/2008, 03h25
  2. Réponses: 6
    Dernier message: 11/12/2007, 17h55
  3. Quels classes utiliser pour remplacer des classes qui sont propriété de Sun
    Par danyboy85 dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 21/11/2007, 16h36
  4. Réponses: 2
    Dernier message: 04/01/2007, 16h48
  5. Des classes qui discutent...
    Par comme de bien entendu dans le forum Langage
    Réponses: 4
    Dernier message: 27/03/2006, 17h45

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