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 :

Probleme inclusion c++


Sujet :

C++

  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Points : 262
    Points
    262
    Par défaut Probleme inclusion c++
    Bonjour à tous,

    J'ai un problème d'inclusion dans mon code : (3 objets : Systeme/fenetreDesigner/GLWidget)

    Systeme :
    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
    25
    26
    27
    28
    29
    30
    /* Systeme.h *****************************************************************************************************************/
    #ifndef SYSTEME_H
    #define SYSTEME_H
     
    class fenetreDesigner;
     
    class Systeme : public QWidget
    {
        Q_OBJECT
     
        private:
            fenetreDesigner * _parentFenetreDesigner;
     
        public:
            Systeme(fenetreDesigner * inParentfenetreDesigner = NULL);
     
        public slots:
            void creerPlateau(QLineEdit * lineEditLongueur, int numTypeFormat);
    };
     
    #endif
    /* Systeme.cpp ***************************************************************************************************************/
    #include "Systeme.h"
     
    Systeme::Systeme(fenetreDesigner * inParentfenetreDesigner) : _parentFenetreDesigner(inParentfenetreDesigner) { }
     
    void Systeme::creerPlateau(QLineEdit * lineEditLongueur, int numTypeFormat)
    {
        _parentFenetreDesigner->getGlWidget()->afficherSystem(this);
    }
    GLWidget :
    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
    /* glWidget.h *****************************************************************************************************************/
    #ifndef GLWIDGET_H
    #define GLWIDGET_H
     
    #include "Systeme.h"
     
    class GLWidget : public QGLWidget
    {
        public:
            GLWidget(QWidget * parent = NULL);
     
            void afficherSystem(Systeme * system);
    };
     
    #endif
    fenetredesigner :
    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
    25
    26
    27
    28
    29
    /* fenetreDesigner.h ***************************************************************************************************************/
    #ifndef FENETREDESIGNER_H
    #define FENETREDESIGNER_H
     
    #include "GLWidget.h"
     
    class fenetreDesigner : public QDialog
    {
        private:
            QGLWidget * _glWidget;
            Systeme   * _system;
     
        public:
            fenetreDesigner(QWidget * parent = NULL);
     
            QGLWidget * getGlWidget();
    };
     
    #endif
    /* fenetreDesigner.cpp *************************************************************************************************************/
    #include "fenetredesigner.h"
     
    fenetreDesigner::fenetreDesigner(QWidget * parent) : QDialog(parent)
    {
        _glWidget = new GLWidget(this);
        _system   = new Systeme (this);
    }
     
    QGLWidget * fenetreDesigner::getGlWidget() { return _glWidget; }

    Voici l'erreur (à la ligne 29 de Systeme.cpp):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     [...] erreur : C2027: utilisation du type non d‚fini 'fenetreDesigner' [...] voir la d‚claration de 'fenetreDesigner'
    Si quelqu'un peut m'aider. Merci.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 128
    Points : 33 041
    Points
    33 041
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    et bien... où se trouve l'include de fenetredesigner.h ?

  3. #3
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 475
    Points
    11 475
    Billets dans le blog
    11
    Par défaut
    Il faut savoir que le compilateur compile les fichiers CPP sans connaissance de ce qu'il a fait avant.
    Donc si on prend ton fichier "Systeme.cpp" on voit que celui-ci inclut "Systeme.h" dans lequel on pré-déclare la classe fenetreDesigner sans la définir, et on définit la classe Systeme.
    Donc effectivement la classe fenetreDesigner n'est pas définie.
    En regardant tes fichiers, on voit que tu définis cette classe dans le fichier "fenetreDesigner.h" (ce qui est tout à fait normal, soit dit en passant). Il faut donc que tu inclues ce fichier dans "Systeme.cpp"

  4. #4
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Points : 262
    Points
    262
    Par défaut
    J'ai déjà essayé. J'obtiens une vingtaine d'erreurs aberrantes

  5. #5
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Points : 262
    Points
    262
    Par défaut
    J'ai réussi à compiler, mais je comprend pas pourquoi :

    En faisant ça, sa ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include "fenetreDesigner.h"
    Par contre ceci fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include "fenetreDesigner.h"
     
    class fenetreDesigner;

    Le fait de mettre #include "fenetreDesigner.h" ne suffit pas ??

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 128
    Points : 33 041
    Points
    33 041
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par CliffeCSTL Voir le message
    Le fait de mettre #include "fenetreDesigner.h" ne suffit pas ??
    Si, l'include est supérieur à une simple forward declaration, mais il faut se méfier des inclusions cycliques.
    Sans voir les messages d'erreur, on peut difficilement répondre.

    L'include tu l'as bien rajouté dans le cpp ?

  7. #7
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    538
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 538
    Points : 262
    Points
    262
    Par défaut
    Mes .cpp ne contiennent que un #include

    exemple.cpp => #include exemple.h

    Je met tous ce que j'ai besoin dans le .h

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 128
    Points : 33 041
    Points
    33 041
    Billets dans le blog
    4
    Par défaut
    Et tu te retrouves dans une inclusion cyclique, qui est le pourquoi tu dois écrire l'include suivi de la forward declaration afin que ça fonctionne. Donc ton problème sera au mieux tombé en marche, au pire déplacé.

    Le header doit en savoir le moins possible et favoriser les forward declaration.
    C'est le code source qui a besoin des définitions complètes et réalise les include.

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

Discussions similaires

  1. probleme inclusion cyclique avec namespace
    Par befalimpertinent dans le forum C++
    Réponses: 4
    Dernier message: 27/05/2010, 09h52
  2. Réponses: 4
    Dernier message: 25/09/2007, 17h12
  3. probleme inclusion librairie
    Par sylvain.cool dans le forum VC++ .NET
    Réponses: 11
    Dernier message: 29/05/2007, 17h59
  4. [POO] Problème inclusion dans une classe
    Par LordBob dans le forum Langage
    Réponses: 11
    Dernier message: 22/11/2005, 15h21
  5. Probleme inclusion
    Par bourbaki2003 dans le forum C++
    Réponses: 7
    Dernier message: 28/10/2005, 09h25

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