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

Autres �diteurs Discussion :

[g++] message erreur etrange


Sujet :

Autres �diteurs

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    80
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 80
    Par d�faut [g++] message erreur etrange
    Bonjour,

    J'ai compil� un programme avec g++ sous linux et voici ce qu'il m'a repondu :
    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
     
    /home/nico/tmp/ccJMYeTF.o(.text+0xadf): In function `main':
    : undefined reference to `EnsExamples::~EnsExamples [in-charge]()'
    /home/nico/tmp/ccJMYeTF.o(.text+0xb24): In function `main':
    : undefined reference to `example::~example [in-charge]()'
    /home/nico/tmp/ccJMYeTF.o(.text+0xb38): In function `main':
    : undefined reference to `example::~example [in-charge]()'
    /home/nico/tmp/ccJMYeTF.o(.text+0xb4a): In function `main':
    : undefined reference to `example::~example [in-charge]()'
    /home/nico/tmp/ccJMYeTF.o(.text+0xb86): In function `main':
    : undefined reference to `EnsExamples::~EnsExamples [in-charge]()'
    /home/nico/tmp/ccJMYeTF.o(.text+0xbe5): In function `main':
    : undefined reference to `example::~example [in-charge]()'
    /home/nico/tmp/ccJMYeTF.o(.text+0xc13): In function `main':
    : undefined reference to `example::~example [in-charge]()'
    /home/nico/tmp/ccJMYeTF.o(.text+0xc39): In function `main':
    : undefined reference to `example::~example [in-charge]()'
    collect2: ld returned 1 exit status
    J'ai encore jamais vu ce type de message, et il me semble un peu ... etrange a mon gout.
    Si quelqu'un voit d'ou ca vient merci de me le faire savoir.

    Merci d'avance

  2. #2
    Membre �prouv� Avatar de alexrtz
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Juin 2003
    Messages
    639
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 42
    Localisation : Canada

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Juin 2003
    Messages : 639
    Par d�faut
    Salut,

    Cela ressemble � un probl�me d'�dtition de liens.

    Pourrais-tu mettre le code (ou un lien vers ton fichier source ou une archive si le code est tr�s long) pour que l'on puisse tester?

  3. #3
    Membre �clair�
    Profil pro
    Inscrit en
    D�cembre 2002
    Messages
    325
    D�tails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : D�cembre 2002
    Messages : 325
    Par d�faut
    Je dirais la m�me chose, tu as du oubli� d'include une biblioth�que, ou un truc du genre. Poste ton code.

  4. #4
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Dans mes souvenirs, il y a deux raisons pour cetype d'erreurs. L'une d'entre elle est l'oubli de d�finir (ou de lier avec la d�finition) des functions, genre le destructeur.

    Si ce n'est pas �a, il faudrait que tu nous montres un exemple minimal mais complet qui reproduise cette erreur avec les lignes de commandes utilis�es pour compiler.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    80
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 80
    Par d�faut
    Voici un bout de code qui me reproduit la meme erreur :

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    #include <iostream>
     
    using namespace std;
     
     
    //struct of an example
    struct example
    {
      char *in;
      char *out;
     
      example(char [] , char []);
     ~example(void);
    };
     
    example::example(char ti[] , char to[])
    {
      in = ti;
      out = to;
     
      return;
    }
     
     
    //struct of an array of examples
    class EnsExamples
    {
      example *pointex;
     
    public :
      EnsExamples(example []);
      ~EnsExamples(void);
      void info (void);
    };
     
    EnsExamples::EnsExamples(example ex[])
    {
      pointex = ex;
      return;
    }
     
     
    void EnsExamples::info(void)
    {
      cout <<"There is "<<sizeof(pointex)<<"examples in this array"<<endl;
      return;
    }
     
     
     
    int main (void)
    {
      char in1[1]={1};
      char out1[3]={1,0,1};
      char in2[1]={0};
      char out2[3]={0,0,0};
      example e1(in1,out1);
      example e2(in2,out2);
      example tab [2]={e1,e2};
     
      EnsExamples ex0(tab);
     
      ex0.info();
     
      return 0;
    }
    pour la compilation je fait tout simplement :

  6. #6
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Qui se minimalise �
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    struct toto {
        ~toto(); // pas de void en C++
    };
     
    int main() // pas de void en C++
    {
        toto t;
        return 0;
    }
    Et c'est bien ce que j'avais "hyppoth�s�".
    Tu n'as pas d�fini les destructeurs.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  7. #7
    Membre confirm�
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    80
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 80
    Par d�faut
    Oups ! En effet j'avait oubli� de d�finir mes destructeurs. (c'est a cause des pointeurs que ce ne marchait pas ?)
    Voici comment je les ai definis :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    example::~example(void)
    {
      if(in!=NULL)delete in;
      if(out!=NULL)delete out;
    }
     
    EnsExamples::~EnsExamples(void)
    {
      if(pointex!=NULL) delete pointex;
    }
    Je sais si c'est la bonne m�thode , en tout cas ca marche.

    Merci beaucoup � ceux qui m'ont mis sur la voie.

  8. #8
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    L� par contre, ce code va t'exploser � la figure -- je ne dis pas �a parce qu'il n'est pas robuste, c'est un autre probl�me.

    Tu veux lib�rer un tableau (non lib�rable qui existe � l'ext�rieur)
    Un conseil passe � des types qui g�rent correctement la m�moire pour toi. std::string pour les cha�nes de caract�res et std::vector<> pour les tableaux.

    PS: pas besoin de tester � null avant de lib�rer. Dans tous les cas delete fera aussi ce test.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  9. #9
    Membre confirm�
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    80
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 80
    Par d�faut
    Hum .... ok
    donc en c++ , il n'y a pas d'int�r�t � utilis� des tableaux, et il faudrait utilis� std::vector � chaque fois ? Pour le moment j'ai pris l'habitude d'utiliser les tableaux, et je n'utilise std::vector que lorsque j'en trouve l'utilit�, mais je pourrais changer si il n'y a pas d'inconv�nient � utiliser std::vector.

  10. #10
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Pas d'int�r�t � haut niveau. Plut�t des d�sanvatages en fait aux tableaux dynamiques bruts.
    En fait, on a tendance � �viter de confier la gestion brute de deux ressources � une m�me classe. Ce qui fait que l'on va fuir l'utilisation de pointeurs bruts. Dans le cadre des tableaux dynamiques, les vecteurs sont une assez bonne solution.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  11. #11
    Membre exp�riment�
    Profil pro
    Inscrit en
    Ao�t 2003
    Messages
    247
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 247
    Par d�faut
    Et il ne faut pas oublier les copains de std::vector que sont std::list, std::deque et std::set (et std::map, mais celui l� n'est pas tout � fait pareil).

  12. #12
    Membre confirm�
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    80
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 80
    Par d�faut
    Merci pour ces pr�cisions.

    Citation Envoy� par Luc Hermitte
    Un conseil passe � des types qui g�rent correctement la m�moire pour toi. std::string pour les cha�nes de caract�res et std::vector<> pour les tableaux.

    J'ai converti mon bout de prog en utilisant std::vector

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    #include <iostream>
    #include <vector>
     
    using namespace std;
     
     
    //struct of an example
    class Example
    {
      vector <bool> in;
      vector <bool> out;
     
    public :
      Example(vector <bool> ,vector <bool>);
      ~Example(void);
    };
     
    Example::Example(vector <bool> ti , vector <bool> to)
    {
      in = ti;
      out = to;
     
      return;
    }
     
     
    //struct of an array of examples
    class EnsExamples
    {
      vector <Example> ex;
     
    public :
      EnsExamples(vector <Example>);
      ~EnsExamples(void);
      void info (void);
    };
     
    EnsExamples::EnsExamples(vector <Example> tex)
    {
      ex = tex;
      return;
    }
     
     
    void EnsExamples::info(void)
    {
      cout <<"There is "<<ex.size()<<"examples in this array"<<endl;
      return;
    }
     
     
     
    int main (void)
    {
     
      return 0;
    }
    J'obtiens ce message :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
     g++ test.cpp
    /home/nico/tmp/cc5HXqsK.o(.gnu.linkonce.t._ZSt8_DestroyI7ExampleEvPT_+0xd): In function `void std::_Destroy<Example>(Example*)':
    : undefined reference to `Example::~Example [in-charge]()'
    collect2: ld returned 1 exit status
    std::vector gere t-il vraiment correctement la m�moire ?

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

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Si tu d�clares ton destructeur, il faut lui donner un corps. Ici tu n'en as plus besoin, enl�ve le donc de la d�claration de ta classe et tu ne devrais plus avoir d'erreur.

    std::vector gere t-il vraiment correctement la m�moire ?
    Oui, c'est le but. Il g�re la r�allocation et la destruction de mani�re automatique et s�re.

    Sinon petite remarque : pour des gros param�tres du genre vector, il vaut mieux les passer par r�f�rence constante.

  14. #14
    Membre confirm�
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    80
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 80
    Par d�faut
    Merci, en effet ca fonctionne. D�sol� de vous avoir d�rang�s pour ca !

    Quelles sont les avantages de passer les gros param�tres en r�f�rence constante ?

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

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Le passage par valeur entra�ne une recopie du param�tre, c'est-�-dire que si ton vecteur contient 1000 �l�ments, un autre vecteur de 1000 �lements sera cr��... pour rien. Avec le passage par r�f�rence constante, tu ne paies qu'une copie de pointeur (en interne, toi tu ne voies rien), donc en g�n�ral 4 octets, ce qui est une miette en comparaison.

  16. #16
    Membre confirm�
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    80
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 80
    Par d�faut
    Ok, encore merci

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. message d'erreur etrange en executant :
    Par Kuchiki Byakuya dans le forum D�buter
    R�ponses: 8
    Dernier message: 21/12/2009, 14h04
  2. [C#]Message d'erreur etrange (Contraintes d'accessibilit�)
    Par Jabbal'H dans le forum Windows Forms
    R�ponses: 1
    Dernier message: 28/09/2006, 08h02
  3. Message erreur InterBase
    Par tchaman dans le forum InterBase
    R�ponses: 9
    Dernier message: 01/04/2005, 15h50
  4. [FLASH MX 2004] message erreur de classe
    Par matN59 dans le forum Flash
    R�ponses: 3
    Dernier message: 14/06/2004, 08h59
  5. [Kylix] message erreur � l'ex
    Par JlouisI dans le forum EDI
    R�ponses: 5
    Dernier message: 08/03/2003, 17h47

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