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 :

Référence croisée, comment faire ?


Sujet :

C++

  1. #1
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 135
    Points : 83
    Points
    83
    Par défaut Référence croisée, comment faire ?
    Bonjours, une fois de plus un probleme de debutant>

    bon j'ai trouver http://cpp.developpez.com/faq/cpp/?p...erence_croisee

    j'ai essayer de suivre la demarche, mais il me reste jous de meme une structure qui echape dans certaint fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    calendrie.cpp
     
    #include <calendrie.h>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    calendrie.cpp
     
    #include <ta.h>
     
    struct cool{
       int x;
       ta A;
       }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ta.cpp
     
    #include <calendrie.h>
    #include <tache.h>
     
    //
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ta.h
     
    #include <calendrie.h>
     
    class ta{
        int g;
        cool hj;  //LE PROBLEME EST ICI,
                   //il ne reconai pas le type  cool 
    }

    Quelle inclusion est en trop et ou il en manque une????

  2. #2
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    Par défaut
    Il faut bien distinguer inclusion et déclaration.

    Tu peux toujours déclarer une classe pour dire qu'elle existe si tu n'utilises pas son implémentation.

    Lorsque tu l'utilises, il faut l'inclure, pas avant.

    Dans un fichier d'en-tête, il faut toujours privilégier la déclaration plutôt que la définition, sauf cas impossible (utilisation de templates, pour ne citer que cet exemple).

    Dans tes 2 fichiers .h, tu mets:

    calendrier.h
    ta.h
    et dans tes fichiers cpp:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #include "ta.h"
    #include "calendrier.h"

  3. #3
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 135
    Points : 83
    Points
    83
    Par défaut
    excuse moi: le deuxième calendrie.cpp, est un calendrie.h.
    n'empêche qu'il ne me prend toujours pas en compte le cool hj; de ta.h

  4. #4
    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
    Points : 13 017
    Points
    13 017
    Par défaut
    Salut,
    Plusieurs remarque :
    1/ En l'absence de header guard (les #ifndef/#define ... #endif) des fichiers d'en-têtes .h, je suis juste étonné que ton compilateur ne plante pas sur un autre type d'erreur.
    2/ Le code que tu montres ne suit pas ce que dit la F.A.Q. La F.A.Q. dit qu'un des deux fichiers références ne doit que déclarer le type utilisé mais pas inclure son en-tête ou le définir :
    Code de A.h : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // pas de include "b.h" ici !
    class B; 
     
    class A 
    { 
        B* PtrB; 
    };

    3/ au moins un des deux types d'un référence croisée doit contenir l'autre par référence ou pointeur. Sinon, cela est tout bonnement impossible en mémoire. Une sorte de récursion infinie : A contient B qui contient A qui contient B qui contient A qui contient B qui ....
    La référence/pointeur casse cette récursion car un des deux types ne contient pas l'autre mais une référence sur l'autre: A contient B qui contient une référence sur A (peut être le même qu'au début).

  5. #5
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 135
    Points : 83
    Points
    83
    Par défaut
    1) oui, il est pas evident qu'avec l'erreur que je fait, que #ifndef ect. mais il y sont.
    2) Je devrai revoire mes cours de lecture
    3) ok, merci pour le rapelle.

    je vais reecrire tous ca...

  6. #6
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 135
    Points : 83
    Points
    83
    Par défaut
    une question, est-ce-que le point 3, compte aussi pour des struct???
    si je comprend bien c'est:
    -oui si la dite struct est utiliser dans les deux tache
    -pas forcement si elle n'est utiliser que dans une seul des class??

  7. #7
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 135
    Points : 83
    Points
    83
    Par défaut
    OK, le code corriger marche. (endin, pas d'erreur a la compilation)
    Merci a tous

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 02/06/2007, 19h06
  2. Comment faire référence à un champ d'un etat dans une requete?
    Par polianita dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/06/2006, 15h26
  3. Comment faire référence à un champ d'un etat dans une requete?
    Par polianita dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 16/06/2006, 17h46
  4. Comment faire référence à un sous sous dossier ?
    Par Angeldu74 dans le forum Langage
    Réponses: 3
    Dernier message: 06/04/2006, 23h22
  5. Comment faire une analyse croisée sous MySQL ?
    Par jcachico dans le forum Requêtes
    Réponses: 1
    Dernier message: 05/12/2005, 18h32

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