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 :

Erreur de compilation "undefined reference"


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut Erreur de compilation "undefined reference"
    Bonsoir à tous

    Je suis un débutant en programation, et j'ai un problème d'executer mon petit programme qui affiche "Hello Word" à l'ecran, mais en utilisant une classe sous C++; Cette classe est découpée en trois fichiers séparés telques hello.h, hello.cc et test_hello.cc qui contient la foction main(); donc quand j'essaie de compiler le test_hello.cc le compilateur me renvoyer le message suivant:

    /tmp/ccFFwWMm.o: In function `main':
    test_Hello.cc:/(.text+0x76): undefined reference to `Hello::Hello()'
    test_Hello.cc:/(.text+0xad): undefined reference to `Hello::Hello(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
    test_Hello.cc:/(.text+0xef): undefined reference to `Hello::affiche()'
    test_Hello.cc:/(.text+0x13a): undefined reference to `Hello::affiche()'
    collect2: ld returned 1 exit status
    pour mieux comprendre voici mes codes:

    Code hello.h : 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
    #ifndef Hello_H
    #include<string>
    #define Hello_H
     
    using namespace std;
     
    class Hello
    {
    public:
    Hello();
    Hello(string s);
    void affiche();
    private:
    string msg;
    };
    #endif

    Code hello.cc : 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
     
    #include <string>
    using namespace std;
    #include "hello.h"
     
    Hello::Hello()
    {
    msg = "Hello Word"; //affectation une valeur à mon string msg 
    }
    Hello::Hello(string s)
    {
    msg = s;
    }
     
    void Hello::affiche()
    {
    	cout<< msg <<endl;
    }


    Code test_hello.cc : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include<iostream>
    #include <string>
    #include "hello.h"
    using namespace std;
     
    int main()
    {
    Hello h1;
    Hello h2("Bonjour");
     
    h1.affiche();
    h2.affiche();
    return 0;
    }

    si quelqu'un peut m'aider ?? je suis à l'écoute

  2. #2
    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
    Bonjour et bienvenu,
    A priori ton code est correct.
    Les erreurs que tu présentes sont des erreurs d'édition de lien. C'est l'opération qui suit la compilation des différents fichiers pour produire l'exécutable. C'est pourquoi, je pense que ton projet doit être incomplet : hello.cc ne doit pas être inclus.
    Quel est ton environnement de développement : compilateur + EDI (Visual, Code::Bock....)?

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Bonjour à tous,

    merci à 3DArchi, pour repondre à votre question je travail sous Linux et j'utilise l'editeur du texte Kate qui fournit l'accès direct au terminal pour la compilation, je vous attend !!

  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
    Comment invoques-tu le compilateur ? L'éditeur de lien ?
    Comment est géré ton makefile?

  5. #5
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    merci pour la reponse encore,
    pour compiler je tappe tous simplement le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g++ test_hello.cc -o test_hello
    et pour le makefile, j'ai pas encore le faire, mais c'est une occasion pour que vous m'aider de l'implemente.

  6. #6
    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
    Le problème était donc bien celui-là
    Voici un petit tutoriel pour le makefile. Il est présenté pour du C, mais le principe est le même pour C++, si ce n'est que tu utilises g++ comme compilateur. Et puis tu dois aussi connaître make.
    Autre tuto intéressant pour toi.
    Voilà !
    Bon courage, et bon Noël.

  7. #7
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    merci beaucoup, et bonne fête à vous aussi.

  8. #8
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    ben, cher 3DArchi j'ai essaié de lire les documentations que vous me donnez, en fin j'ai reussi d'ecrire le code de makefile suivant selon les régles indiquées dans la documentation Makefile:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    hello: hello.o test_hello.o
      g++ -o hello hello.o test_hello.o
     
    hello.o: hello.cc
      g++ -o  hello.o -c hello.cc -w -wall -ansi -pedantic
     
    test_hello.o: test_hello.cc hello.h
      g++ -o test_hello.o -c test_hello.cc -w -wall -ansi -pedantic
    mais toujours je rencontre de probleme d'execution, et le compilateur renvoie le message:

    makefile:2: *** missing separator. Stop.

  9. #9
    Membre averti Avatar de Trunks
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    534
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 534
    Points : 412
    Points
    412
    Par défaut
    Avant g++, il faut une tabulation et non pas des espaces ...

  10. #10
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Bonsoir Trunks,

    j'ai rectifié le code mais il n'arrive pas s'executé !!

  11. #11
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Peux-tu expliciter un peu plus s'il te plait?

  12. #12
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Bonsoir à tous,

    je crois que j'ai bien expliqué tous ce qui concerne mes codes, en tous cas vous pouvez voir les énoncés précedents.

  13. #13
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Je parlais du : il n'arrive pas à s'exécuter en fait... quelle est l'erreur retourné? toujours la même?

  14. #14
    Futur Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    eh oui c'est la même erreur:

    makefile:2: *** missing separator. Stop.

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 25
    Points : 25
    Points
    25
    Par défaut
    Moi je travaille sous Eclipse C++, je compile sous Mingw et Qt 4.4.3 et j'ai la même erreur :

    mingw32-make debug
    mingw32-make -f Makefile.Debug
    mingw32-make[1]: Entering directory `C:/Documents and Settings/asima/workspace/test'
    mingw32-make[1]: Leaving directory `C:/Documents and Settings/asima/workspace/test'
    Makefile.Debug:61: *** missing separator. Stop.
    mingw32-make: *** [debug] Error 2

    Et quand je regarde ou c'est :

    ####### Implicit rules

    .SUFFIXES: .c .cpp .cc .cxx

    {.}.cpp{debug\}.obj::
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fodebug\ @<<
    $<
    <<

    {.}.cc{debug\}.obj::
    $(CXX) -c $(CXXFLAGS) $(INCPATH) -Fodebug\ @<<
    $<
    <<

    ...

    c'est un truc que je n'ai pas écrit mais qui est généré automatiquement.

    Je ne vois donc pas comment je peux régler le problème non plus. Et google n'a pas été mon ami ces deux derniers jours pour trouver une solution.

Discussions similaires

  1. Compilation et "undefined reference"
    Par bzerath dans le forum Débuter
    Réponses: 11
    Dernier message: 28/10/2011, 10h33
  2. Réponses: 8
    Dernier message: 22/07/2008, 15h30
  3. Erreur compilation "undefined reference to "
    Par ViRouF dans le forum C++
    Réponses: 5
    Dernier message: 02/03/2007, 15h55
  4. [debutant] compilation g++ : undefined reference
    Par xavlours dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 10/03/2005, 16h49

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