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 :

Problème lors de la compilation


Sujet :

C++

  1. #1
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut Problème lors de la compilation
    Bonjour,

    Pour les besoin d'un projet, je dois compiler un morceau de code de ce type :

    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
     
    class B;
    class C;
     
    template<typename T> class A
    {
    };
     
    class B : A<C>
    {
    	C Create(){}
    };
     
    class C
    {
         public :
    	B Create(){}
    };
    Lorsque je lance la compilation de ce programme, j'obtiens cette-erreur là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    test2.cpp: In member function 'C B::Create()':
    test2.cpp:16: error: return type 'struct C' is incomplete
    Comment puis-je résoudre ce problème ? Merci d'avance pour votre aide.


    Nico.
    Athlon 6000+ Dual Core & GeForce 8600 GT -- Ubuntu Gutsy

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Points : 307
    Points
    307
    Par défaut
    Si tu dois compiler ce code sans rien y changer, ça ne sera pas possible : B a besoin de la définition complète de C (donc celle-ci doit figurer avant celle de B) et vice-versa.

  3. #3
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    mets d'abord la définition de la classe C avant celle de la classe B...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  4. #4
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut
    Et comment puis-je m'y prendre si je sépare chaque classe avec un header (*.h) et le code source (*.cpp) dans deux fichiers différents ?
    Athlon 6000+ Dual Core & GeForce 8600 GT -- Ubuntu Gutsy

  5. #5
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Code A.h : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    template<typename T> class A
    {
    };

    Code C.h : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class B;
     
    class C
    {
    };

    Code B.h : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include "A.h"
    #include "C.h"
     
    class B
    {
    };

    un truc dans ce style A étant un template il n'a pas de .cpp associé...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Citation Envoyé par Swoög
    mets d'abord la définition de la classe C avant celle de la classe B...
    Ce qui ne changera rien au problème.
    Ce que veut faire l'OP n'est tout simplement pas possible.
    Boost ftw

  7. #7
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Et comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class B : A<C*>
    {
    	C* Create(){}
    };
    ?
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Points : 307
    Points
    307
    Par défaut
    Citation Envoyé par seriousme
    Et comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class B : A<C*>
    {
    	C* Create(){}
    };
    ?
    Comme ça, ça marche en mettant une déclaration anticipée de C avant la déclaration de B. Par contre, on change ce que veut faire l'OP qui n'utilise pas de pointeurs.

  9. #9
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Citation Envoyé par roulious
    on change ce que veut faire l'OP qui n'utilise pas de pointeurs.
    Il n'y a pas le choix il faut qu'une classe invoque l'autre via des pointeurs.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  10. #10
    Membre habitué Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Points : 146
    Points
    146
    Par défaut
    Je vous remercie pour votre aide, j'ai enfin réussi à compiler le programme. Pour ceux que ça intéressent, j'écris une petite bibliothèque multi-plateformes permettant de manipuler les fichiers et répertoires (ça existe peut-être déjà mais je cherche surtout à m'entraîner). Le seul problème que j'ai maintenant c'est de chercher un nom à mon projet

    Sources du projet : http://nicolas.lerme.free.fr/test6.zip
    Athlon 6000+ Dual Core & GeForce 8600 GT -- Ubuntu Gutsy

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

Discussions similaires

  1. problème lors de la compilation
    Par mob07 dans le forum Java ME
    Réponses: 1
    Dernier message: 08/04/2007, 11h19
  2. problème lors de la compilation
    Par snake264 dans le forum Dev-C++
    Réponses: 5
    Dernier message: 14/11/2006, 20h07
  3. Réponses: 4
    Dernier message: 25/09/2006, 10h24
  4. problème lors de la compilation : Unsatisfied symbols
    Par la schtroumpfette dans le forum C
    Réponses: 6
    Dernier message: 29/12/2005, 09h52
  5. Réponses: 7
    Dernier message: 27/09/2005, 21h40

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