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

MFC Discussion :

Probl�me avec deux structs dans deux fichiers .h


Sujet :

MFC

  1. #1
    Membre exp�riment�
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Par d�faut Probl�me avec deux structs dans deux fichiers .h
    Bonjour tout le monde,

    j'ai deux fichiers .h qui contiennent deux structures diff�rentes (st1 dans file1 et st2 dans file2). Chacun de ces deux fichiers a un include sur l'autre. J'aimerais d�clarer une variable de type st1 dans file2 mais j'y arrive pas.

    Un petit bout de code est plus parlant:

    file1.h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #ifndef _FILE1
    #define _FILE1
     
    #include "file2.h"
     
    typedef struct ST1
    {
    	char	c1;
    }st1;
     
    #endif
    file2.h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #ifndef _FILE2
    #define _FILE2
     
    #include "file1.h"
     
    typedef struct ST2
    {
    	char	c2;
    	st1 a; //<--- Problème
    }st2;
     
    #endif
    Les .cpp ne contiennent absolument rien (si ce n'est les includes aux .h correspondants).

    Merci d'avance pour votre aide

  2. #2
    Membre �m�rite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par d�faut
    Salut,

    Donne le message du compilo...

    [/code]

  3. #3
    Membre exp�riment�
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Par d�faut
    Voil�:

    c:\test1\file2.h(10) : error C2146: syntax error : missing ';' before identifier 'a'
    c:\test1\file2.h(10) : error C2501: 'st1' : missing storage-class or type specifiers
    c:\test1\file2.h(10) : error C2501: 'a' : missing storage-class or type specifiers

  4. #4
    Membre �m�rite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par d�faut
    C'est bon

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #ifndef _FILE1 
    #define _FILE1 
     
    //#include "file2.h"          mettre ceci en commentaire
     
    typedef struct ST1 
    { 
       char   c1; 
    }st1; 
     
    #endif
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #ifndef _FILE2 
    #define _FILE2 
     
    #include "file1.h" 
     
     
    typedef struct ST2 
    { 
       char   c2; 
       st1 a; //<--- Problème 
    } st2; 
     
    #endif
    C'est OK

  5. #5
    Membre exp�riment�
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Par d�faut
    NON justement j'ai besoin des includes crois�s, sinon ca aurait �t� trop facile

    Bien essay� quand m�me, mais ca r�soud pas mon pbme...

  6. #6
    Membre �m�rite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par d�faut
    Sans les includes crois�s quel est donc le pb :
    Quels sont les nouveaux messages d'erreurs...

  7. #7
    Membre exp�riment�
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Par d�faut
    Citation Envoy� par Gabrielly
    Sans les includes crois�s quel est donc le pb :
    Quels sont les nouveaux messages d'erreurs...
    Je ne veux pas enlever les includes crois�es parce que j'en ai besoin. Donc en gros je dois pouvoir inclure les fichiers dans les deux sens et utiliser les deux structures dans les deux fichiers !!

    Sous builder je sais comment faire, il suffit de d�clarer tout en haut du fichier que "ceci est une classe et le contenu viendra apr�s", mais en Visual j'en ai aucune id�e !

  8. #8
    Membre �m�rite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par d�faut
    Bon �coute voici ce que j'ai

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #ifndef _FILE1 
    #define _FILE1 
     
    #include "file2.h" 
     
    typedef struct ST1 
    { 
       char   c1; 
    }st1; 
     
    #endif
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #ifndef _FILE2 
    #define _FILE2 
     
    #include "file1.h" 
     
     
    typedef struct ST2 
    { 
       char   c2; 
       ST1 a; //<--- Problème 
    }st2; 
     
    #endif
    fichier main

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //#include "file.h"
    #include "file2.h"
     
     
    void main()
    {
     
    }
    le code se compile bien.
    Je crois que �a va

  9. #9
    Membre chevronn�
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Par d�faut
    sinon, il faut prototype ton st1 avant de faire ton include de file2 :
    Comme file1 inclus pas de file2 tu peut faire comme suit :

    file1.h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    #ifndef _FILE1 
    #define _FILE1 
     
    typedef struct ST1 
    { 
       char   c1; 
    }st1;
    #include "file2.h"

    #endif



    file2.h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #ifndef _FILE2 
    #define _FILE2 
     
    #include "file1.h" 
     
    typedef struct ST2 
    { 
       char   c2; 
       st1 a; //<--- Problème 
    }st2; 
     
    #endif

  10. #10
    Membre exp�riment�
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Par d�faut
    Merci pour ta r�ponse matazz, effectivement l� ca marche mais comme je l'ai dit je vais avoir besoin d'utiliser les deux structures dans les deux fchiers (mon exemple n'�tait pas complet).

    Ce que je voudrais avoir c'est un truc dans le genre:

    file1.h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    #ifndef _FILE1
    #define _FILE1
     
    #include "file2.h"
     
    typedef struct ST1
    {
      int a;
      st2 b;   
    }st1;
     
    #endif
    file2.h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #ifndef _FILE2
    #define _FILE2 1
     
    #include "file1.h"
     
    typedef struct ST2
    {
      int c;
      st1 d;
    }st2;
    #endif
    Merci pour votre aide...

  11. #11
    Membre chevronn�
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Par d�faut
    alors dans se cas l� tu a int�ret � faire des classe car tu peut les prototyp�es :


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #ifndef _FILE1 
    #define _FILE1 
     
    class Classe1;
     
    #include "file2.h" 
     
    class Classe1
    {
    Classe2 Cl2;
    ...
    }
     
    #endif


    file2.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
    #ifndef _FILE2 
    #define _FILE2 1 
     
    class Classe2;
     
    #include "file1.h" 
     
    class Classe2
    {
    Classe1 cl1;
    ...
    }
     
    #endif

    Je suis pas sur que tu puisse le faire avec des structs essaye un #define st2 avant ton include de File1.h, mais je ense que cela ne marchera pas....

  12. #12
    Membre �m�rite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par d�faut
    Et attend...

    A d�faut d'inclure deux fichiers file1.h et file2.h tu inclus seulement file2.h car il reprend file1.h

    tu n'as pas vu le poste au dessus

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //#include "file.h"                
    #include "file2.h" 
     
     
    void main() 
    { 
     
    }
    Chez moi �a se compile.

  13. #13
    Membre exp�riment�
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Par d�faut
    Non d�sol� je ne peux pas passer en classe pour la simple et unique raison qu'il ne s'agit pas de mon code !! Donc j'essaye juste d'aider, mais si personne n'a une solution pour faire du forward declaration (qui et le cas dans ton exemple), alors il n'y a pas le choix que de tout mettre dans le .h...

    Merci quand m�me � tout ceux qui ont essay�..

  14. #14
    Membre exp�riment�
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Par d�faut
    Citation Envoy� par Gabrielly
    Et attend...

    A d�faut d'inclure deux fichiers file1.h et file2.h tu inclus seulement file2.h car il reprend file1.h

    tu n'as pas vu le poste au dessus

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    //#include "file.h"                
    #include "file2.h" 
     
     
    void main() 
    { 
     
    }
    Chez moi �a se compile.
    D�sol� j'avais pas fais gaffe, mais je ne pense pas que ca r�soudra mon probl�me (Regardes le deuxi�me exemple que j'ai post�, il est plus complet)...Je vais essayer quand m�me ;-)

  15. #15
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Tu as un probl�me de conception.

    st1 contient un st2 qui contient un st1 qui contient un st2 qui contient un st1 qui contient un st2 qui...

    Tu ne peux pas faire boucler les compositions comme �a, �a n'a aucun sens. R�soud cela et tu r�soudra ton probl�me d'inclusions circulaires .

  16. #16
    Membre exp�riment�
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Par d�faut
    Citation Envoy� par Loulou24
    Tu as un probl�me de conception.

    st1 contient un st2 qui contient un st1 qui contient un st2 qui contient un st1 qui contient un st2 qui...

    Tu ne peux pas faire boucler les compositions comme �a, �a n'a aucun sens. R�soud cela et tu r�soudra ton probl�me d'inclusions circulaires .
    Oui je sais parfaitement que c'est pas normal, cependant deux choses s'imposent:
    - C'est quelque chose de r�alisable avec les classes (m�me si c'est pas tr�s beau)
    - Ce n'est pas mon code :-) Donc j'essaye juste d'apporter une aide sur l'existant. Et vu la taille du projet je pense que le mieux serait de mettre toutes les d�clarations de structures dans un m�me fichier.

  17. #17
    Membre �m�rite
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    D�tails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Par d�faut
    en tout cas avec de telles d�pendances, il faudrait les mettre dans un seul fichier. Mais cela rel�ve effectivement d'un probl�me de conception comme l'a dit Loulou24.
    Voit par exemple afxwin.h ou afxdb.h Les classes qui s'apparentent sont mises dans un m�me fichier.

    Bon courage et @+

  18. #18
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    - C'est quelque chose de r�alisable avec les classes (m�me si c'est pas tr�s beau)
    Absolument pas. Tes classes auraient une taille infinie. Pour que 2 classes se r�f�rencent l'une l'autre comme �a il faut quelque part au moins une r�f�rence ou un pointeur.

  19. #19
    Membre exp�riment�
    Avatar de Neo41
    Inscrit en
    Janvier 2003
    Messages
    241
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 241
    Par d�faut
    Citation Envoy� par Loulou24
    - C'est quelque chose de r�alisable avec les classes (m�me si c'est pas tr�s beau)
    Absolument pas. Tes classes auraient une taille infinie. Pour que 2 classes se r�f�rencent l'une l'autre comme �a il faut quelque part au moins une r�f�rence ou un pointeur.
    Je peux tr�s bien d�clarer deux classes, et que chacune des deux classes contienne une instance ayant comme type l'autre classe. Cependant, et comme je l'ai dis, ceci est valable pour Builder mais je n'arrive pas � le faire avec Visual. Je vois aussi sur le net que pas mal de gens utilisent cette technique de coder pour des raisons quelqconques.

    Ce que j'ai d�j� fait se r�sume en le suivant (toujours sous builder):

    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
     
    //File1
    #include "File2.h"
    class c2;
     
    class c1
    {
      c2 var2;
    };
     
     
    //File 2
    #include "File1.h"
    class c1;
     
    class c2
    {
     c1 var1;
    }
    Maintenant comment r�aliser ceci avec Visual ? Sinon tant pis ! :-D

  20. #20
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut


    Comment veux-tu qu'une telle configuration soit possible... Prend une minute pour r�flechir � ce que cela aurait comme cons�quence sur tes 2 classes, notamment au niveau de leur taille, et mets-toi bien en t�te que ceci est impossible � compiler.

    Citation Envoy� par Loulou24
    st1 contient un st2 qui contient un st1 qui contient un st2 qui contient un st1 qui contient un st2 qui...
    A ton avis ce petit jeu s'arr�terait quand ?

+ R�pondre � la discussion
Cette discussion est r�solue.
Page 1 sur 2 12 Derni�reDerni�re

Discussions similaires

  1. Probl�me avec une commande dans un fichier .sh
    Par ploxien dans le forum R�seau
    R�ponses: 8
    Dernier message: 19/03/2008, 11h55
  2. R�ponses: 2
    Dernier message: 24/08/2007, 20h17
  3. rechercher et extraire deux chaines dans un fichier
    Par piotr dans le forum Langage
    R�ponses: 16
    Dernier message: 13/07/2006, 15h07
  4. R�ponses: 1
    Dernier message: 28/06/2006, 16h07
  5. R�ponses: 9
    Dernier message: 25/09/2005, 16h33

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