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 :

forward déclaration de strcuture


Sujet :

C++

  1. #1
    Membre habitué Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Points : 154
    Points
    154
    Par défaut forward déclaration de strcuture
    Salut,
    voici mon pb:
    Dans un header une de mes fonctions reçoit un pointeur sur une structure. Or j'aimerai ne pas inclure le header où est définie la structure (Pb de reférence croisées). Je sais qu'avec des classes on peu utiliser une "forward" déclaration. Mais pour les structures est-ce possible ? si oui quel est la syntaxe (j'en ai essayé quelques unes mais ça ne compile pas)?

  2. #2
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut
    En C++, classes et structures sont équivalents, à quelques différences près (Class et struct dans la FAQ). Mais pour les forward declaration :
    devrait fonctionner tout aussi bien que
    And still we will be here, standing like statues ...

  3. #3
    Membre habitué Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Points : 154
    Points
    154
    Par défaut
    ben c'est le premiers truc que j'ai essayé et le compilo à l'impression que c'est une double définition

  4. #4
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut
    Est-ce que tu peux poster un code minimal (enfin le plus possible) qui reproduit cette erreur ?
    (ps: j'imagine que tu as bien des include guards sur tous tes en-têtes ?)
    And still we will be here, standing like statues ...

  5. #5
    Membre habitué Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Points : 154
    Points
    154
    Par défaut
    struct.hxx
    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 __STRUCT__
    #define __STRUCT__
     
    #include "struct_user.hxx"
     
    typdef struct 
    {
    int foo;
    char bar;
     
    }myStruct;
     
    #endif
    struct_user.hxx
    #ifndef __STRUCT_USER__
    #define __STRUCT_USER__

    struct myStruct;

    class StructUser
    {
    public :
    void printStruct(myStruct *)
    };
    #endif
    struct_user.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include "struct.hxx"
    #include "struct_user.hxx"
    #include <iostream>
     
    using namespace std;
     
    void StructUser::printStruct(myStruct * _s)
    {
    	cout << "foo:" << _s->foo << "bar"<< _s->bar << endl;
    }
    [edit] merci pour ton aide. Là c'est la version qui ne compile pas.

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Bon, déjà, en C++ typedef n'existe plus, donc c'est struct myStruct {};
    Ensuite, le code fourni ne compile pas non plus, il manque des ";"

  7. #7
    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 : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Une déclaration anticipée sur un typedef, je ne pense pas que ça fonctionne. De toute façon comme te l'a dit Miles tu n'as pas besoin de ce typedef en C++, ce qui résoud le problème.

  8. #8
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    C'est quoi le message d'erreur du compilateur ?

  9. #9
    Membre habitué Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Points : 154
    Points
    154
    Par défaut
    merci de vos réponses mais si j'enlève mon typedef le message d'erreur MSVC++ 6 est:

    struct_user.cpp(8) : error C2065: '_s' : undeclared identifier

    en le laissant avec MSVC++ 6 et forte6 U2:

    'myStruct' : redefinition; different basic types

    je comprend bien que si mon compilo ne respecte pas la norme je devrait en changer. Mais ce problème se posant dans le cadre de mon travail je n'ai pas le choix. Mon code doit être compatible avec MSVC6 en windows, forte 6 U2 en solaris, Gcc en Linux.
    Donc si quelqu'un voit une astuce pour passer outre.

    Citation Envoyé par miles
    Bon, déjà, en C++ typedef n'existe plus, donc c'est struct myStruct {};
    Ensuite, le code fourni ne compile pas non plus, il manque des ";"
    il en manques juste un non ? Et mon problème est que je n'arrive pas à le voir vue que le sujet du post m'arrète avant.

  10. #10
    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 : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tu l'enlèves comment le typedef ?

    Si tu fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct
    {
    int foo;
    char bar;
     
    }myStruct;
    Alors tu vas déclarer une instance myStruct d'une structure non nommée.

    Il faut faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct myStruct
    {
    int foo;
    char bar;
     
    };

  11. #11
    Membre habitué Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Points : 154
    Points
    154
    Par défaut
    mreci à tous effectivement sans le typedef et correctement écrit ça va mieux.
    Sans chercher d'excuses, je vient du C et la non utilité du typedef en C++ m'avait complétement échappé.
    Encore merci à tout ceux qui m'ont consacré un peu de temps.

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

Discussions similaires

  1. Forward déclarations et namespaces
    Par nicolo011 dans le forum C++
    Réponses: 2
    Dernier message: 17/01/2011, 20h01
  2. Forward déclaration et références ?
    Par Jeromnimo dans le forum C++
    Réponses: 3
    Dernier message: 28/06/2010, 14h01
  3. Classe generics et forward déclaration
    Par stanislas dans le forum Langage
    Réponses: 5
    Dernier message: 02/04/2010, 10h52
  4. Déclaration forward ou external non-satistaite
    Par Invité dans le forum Débuter
    Réponses: 12
    Dernier message: 13/07/2008, 11h04
  5. Déclaration forward ou external non satisfaite
    Par manel77 dans le forum Delphi .NET
    Réponses: 2
    Dernier message: 27/07/2007, 12h29

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