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 :

Linker error: undefined reference to ..


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 308
    Par défaut Linker error: undefined reference to ..
    Bonsoir,
    Lorsque je compile un projet C++ composé de trois fichiers: *.h, *.cpp et main.cpp et qui a été correctement compilé et exécuté lors de sa création, le système me renvoie des linker errors: toutes les méthodes causes des indefined references. Ceci seulement lorsque le projet est relancé après être fermé après sa création (premier lancement après la première ferméture du projet).
    Avez-vous une explication?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 45
    Par défaut
    Salut,

    Tu compiles ton programme comment ?
    -makefile perso
    -gmake
    -un environement de developpemment avec compilateur integre

    Pourai je avoir le debut d'un de tes fichiers h ?

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 308
    Par défaut
    Sincèrement je n'ai pas compris ce que signifie ce que tu as écris après les tirets. Ce que je peux te dire c'est que je crée une nouvelle classe (avec dev-c++ ou bien des nouveaux fichiers h et ccp avec codeblocks), j'écris le code et finalement je fais compiler ou compiler & exécuter.

    Exemple de projet:
    Premier fichier 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
    15
    16
    17
    18
    19
    20
    21
    22
    #ifndef UNEPIECE_H
    #define UNEPIECE_H
    #include <string.h>
     
    class UnePiece
    {
    protected:
    	char *son_nom;
    public:
    	UnePiece (char *tel_ptr)
       {
    	son_nom=new char [strlen(tel_ptr)+1];
    	strcpy(son_nom,tel_ptr);
    	}
     
    	~UnePiece ()
       {
    		delete []son_nom;
    	}
    };
     
    #endif
    Deuxième fichier 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    #ifndef UNEPIECESIMPLE_H
    #define UNEPIECESIMPLE_H
    #include "UnePiece.h"
    #include <string.h>
     
    class UnePieceSimple: public UnePiece
    {
    private:
       int son_poids;
     
    public:
    	UnePieceSimple(char *tel_ptr ,int tel_pds): UnePiece(tel_ptr),son_poids(tel_pds){}
     
       int donnePoids();
     
       void affiche();
    };
     
     
    class UnePieceComposite: public UnePiece
    {
    private:
        UnePieceSimple **sesComposants; // fin du tableau marquée par 0
     
    public:
    	 UnePieceComposite(char *tel_ptrn , UnePieceSimple **tel_ptrp): UnePiece(tel_ptrn)
        {
          int i,j;
    	   for(i=0; tel_ptrp[i]; i++);
    	   sesComposants = new UnePieceSimple*[i+1];
    	   for (j=0; j<=i; j++)
    	     sesComposants[j]=tel_ptrp[j];
        }
     
    	 int donnePoids();
     
        void affiche();
     
        ~UnePieceComposite ()
    	{
    		delete [] sesComposants;
    	}
    };
    #endif
    Fichier cpp:
    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
    31
    32
    33
    #include "UnePiece.h"
    #include "UnePieceSimple.h"
    #include <iostream>
    using namespace std;
    #include <string.h>
     
    int UnePieceSimple::donnePoids(){return son_poids;}
    void UnePieceSimple::affiche(){cout << son_nom << endl;}
     
     
    int UnePieceComposite::donnePoids()
    {
    	int som=0,i=0;
    	while(sesComposants[i] != NULL)
       {
    		som+=sesComposants[i]->donnePoids();
    		i++;
    	}
    	return som;
    }
     
     
    void UnePieceComposite::affiche()
    {
       int i=0;
    	cout << son_nom <<":"<< endl;
    	while(sesComposants[i] != 0)
       {
    		cout << "\t";
    		sesComposants[i]->affiche();
    		i++;
    	}
    }
    Fichier main.cpp:
    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
    #include "UnePiece.h"
    #include "UnePieceSimple.h"
    #include <iostream>
    using namespace std;
    #include <string.h>
     
    int const MAX_COMPOSANTS=11;
     
    int main ()
    {
    	UnePieceSimple la_s1("ecrou",20);
    	UnePieceSimple la_s2=la_s1, la_s3=la_s1;
    	UnePieceSimple la_s4("vis",15);
    	UnePieceSimple la_s5=la_s4, la_s6=la_s4;
    	UnePieceSimple la_s7("plaque",200);
    	UnePieceSimple *telComposants[MAX_COMPOSANTS]=
       {&la_s1,&la_s2,&la_s3,&la_s4,&la_s5,&la_s6,&la_s7,NULL};
     
    	UnePieceComposite la_c1("appareil",telComposants);
     
    	la_c1.affiche();
    	cout<<"son poids est:"<<la_c1.donnePoids()<<endl;
     
    	system("PAUSE");
    	return 0;
    }
    Les messages d'erreur sont:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     C:\Users\user\AppData\Local\Temp\cciYbaaa.o(.text+0x2a7) In function `main': 
     C:\Users\user\AppData\Local\Temp\cciYbaaa.o(.text+0x2a7) In function `main':  [Linker error] undefined reference to `UnePieceComposite::affiche()'  
     C:\Users\user\AppData\Local\Temp\cciYbaaa.o(.text+0x2a7) In function `main':  [Linker error] undefined reference to `UnePieceComposite::donnePoids()' 
     C:\Users\user\AppData\Local\Temp\cciYbaaa.o(.text+0x2a7) ld returned 1 exit status
    Et je suis sous vista.

  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
    Par défaut
    Salut,
    La question d'okaido peut être reformulé ainsi : comment lances-tu ta compilation ? A partir de Code::Block (1) ? A partir de Dev-C++ (2) ? A la main (3).
    Je pense qu'il doit s'agir de (1) ou (2). Visiblement, le fichier Fichier cpp n'est pas inclus dans le projet et n'est donc pas compilé.

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Attention: La classe UnePiece doit soit avoir un constructeur de copie et un opérateur d'affectation correctement définis, soit être non-copiable et non-assignable.

    ...sinon, tu cours droit au crash.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre éclairé
    Inscrit en
    Novembre 2008
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 308
    Par défaut
    Le fichier cpp est inclu dans le projet. Peux-tu m'expliquer ce que tu entends, 3DArchi, par n'est pas inclu? Si cela était vrai le projet n'aurait pas été compilé la première fois après sa création.

    Médinoc, peux-tu me montrer l'erreur? Je n'ai pas fait un constructeur par copie et je ne vois pas d'erreur.

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/06/2007, 12h34
  2. [Linker error] undefined reference to ..
    Par lichman dans le forum C++
    Réponses: 5
    Dernier message: 15/01/2007, 16h50
  3. Réponses: 1
    Dernier message: 14/11/2006, 11h12
  4. [Linker error] undefined reference to...
    Par z980x dans le forum C++
    Réponses: 4
    Dernier message: 05/03/2006, 15h30
  5. [Linker error] undefined reference to 'IcmpSendEcho@'
    Par Xevious dans le forum Autres éditeurs
    Réponses: 7
    Dernier message: 29/12/2005, 16h45

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