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 :

undefined reference to `string::string(char*)'


Sujet :

C++

  1. #1
    Membre �clair� Avatar de H-bil
    Inscrit en
    F�vrier 2006
    Messages
    337
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2006
    Messages : 337
    Par d�faut undefined reference to `string::string(char*)'
    salut tout le monde
    c'est la premi�re fois que je programme en C++ sous C::B, et j'ai toujours l'erreur suivante
    /home/*********/c/String/main.cpp:5: undefined reference to `string::string(char*)'
    :: === Build finished: 1 errors, 0 warnings ===
    et voici le code

    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
     
    //class.h
    #include<iostream>
    #include<string.h>
     
    class string
    {
        public:
        string();
        string(char*);
        string(unsigned int);
        string(const string &);
        string operator+(string);
        string operator=(string);
     
        private:
        unsigned int tailleMax;
        char* chaine;
    };
     
    //class.cpp
    #include "class.h"
     
    string::string()
    {
    }
     
    string::string(char* ch):tailleMax(strlen(ch)),chaine(new char[tailleMax+1])
    {
        strcpy(chaine,ch);
    }
     
    string::string(unsigned int t):tailleMax(t)
    {
    }
     
    //main.cpp
    #include "class.h"
     
    int main()
    {
        string s1("test");
        return 0;
    }
    une autre petite question
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    string::string(char* ch):tailleMax(strlen(ch)),chaine(new char[tailleMax+1])
    {
        strcpy(chaine,ch);
    }
    dois-je ajouter le caract�re de fin de chaine ici ou non?


  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    Pour ta premi�re erreur, je ne vois pas trop.

    Pour strcpy(), tu n'as pas besoin de rajouter le caract�re nul, il est copi� par strcpy().
    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.

  3. #3
    Membre �clair� Avatar de H-bil
    Inscrit en
    F�vrier 2006
    Messages
    337
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2006
    Messages : 337
    Par d�faut
    merci M�dinoc

    si je regroupe tout le code dans un seul fichier, je n'ai plus cette erreur .
    avez-vous une id�e ?!

  4. #4
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 299
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 299
    Billets dans le blog
    2
    Par d�faut
    Quand tu dis C::B, tu parles bien de Code::Blocks?

  5. #5
    Membre exp�riment�

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    171
    D�tails du profil
    Informations personnelles :
    �ge : 43
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 171
    Par d�faut
    Bonjour,

    L'include "string.h" n'est pas tout � fait correcte, pour utiliser strcpy en c++ tu devrais unclure <cstring>.

    Je ne pense pas que cela corrige ton probl�me mais bon, c'est d�ja �a .

  6. #6
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    Ah, je commence � comprendre.
    As-tu fait un Projet sous C::B ?
    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.

  7. #7
    Membre �clair� Avatar de H-bil
    Inscrit en
    F�vrier 2006
    Messages
    337
    D�tails du profil
    Informations forums :
    Inscription : F�vrier 2006
    Messages : 337
    Par d�faut
    oui c'est bien sa, un projet sous codes::blocks
    Citation Envoy� par Aurelpitiless Voir le message
    Bonjour,

    L'include "string.h" n'est pas tout � fait correcte, pour utiliser strcpy en c++ tu devrais unclure <cstring>.

    c'est koi la diff�rence entre
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
     #include <cstring>
    //et
    #include<string.h>
    car j'ai test� et les deux marchent

  8. #8
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    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 397
    Par d�faut
    string.h, c'est "ancien" et d�di� au C.
    En C++, string.h est "obsol�te", et c'est <cstring> qui est recommand�.

    Et si tu as fais un projet et que les deux fichier sont dedans, eh bien je ne comprends pas pourquoi l'�dition de liens �choue.
    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.

  9. #9
    r0d
    r0d est d�connect�
    Membre exp�riment�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    4 299
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 4 299
    Billets dans le blog
    2
    Par d�faut
    Juste une question (ne sait-on jamais):
    pourquoi as-tu besoin d'impl�menter cette classe string? Est-ce un exercice? Est-ce dans un cadre "productif"?
    Je demande �a car la classe string existe d�j� dans la lib standard c++ (en-t�te <string>), et comme on dit souvent: "il est idiot de r�-inventer la roue".
    Autre chose, �tant donn� que la classe string existe d�j� dans la lib standard, il est dangereux de d�clarer une classe portant le m�me nom.

  10. #10
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    Ao�t 2004
    Messages
    1 717
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 1 717
    Par d�faut
    Si je me trompe pas, utiliser une variable membre comme paramettre de construction d'une autre variable membre , le tout dans la liste d'initialisation donne un "comportement ind�finis", non?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    string::string(char* ch):tailleMax(strlen(ch)),chaine(new char[tailleMax+1])
    Ce bout de code peut ne pas marcher � tous les coups... tailleMax est utilis� alors qu'on ne sais pas si il a �t� initialis� car l'ordre d'initialization n'est pas d�finis dans le standard (si je me trompe pas, encore une fois).


    Sinon, pour la premi�re erreur, v�rifie que class.cpp est bien compil�? De loin �a ressemble a une erreur de link mais j'ai pas l'habitude de ce Code::Blocks...

  11. #11
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    16
    D�tails du profil
    Informations personnelles :
    �ge : 36

    Informations forums :
    Inscription : Novembre 2006
    Messages : 16
    Par d�faut
    Tu n'as pas ajouter le std

    soit tu �crit std::string a chaque utilisation, ou au d�but de ton code tu �crit

    et voila, le tout devrait fonctionner

  12. #12
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Citation Envoy� par Klaim Voir le message
    Si je me trompe pas, utiliser une variable membre comme paramettre de construction d'une autre variable membre , le tout dans la liste d'initialisation donne un "comportement ind�finis", non?

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    string::string(char* ch):tailleMax(strlen(ch)),chaine(new char[tailleMax+1])
    Ce bout de code peut ne pas marcher � tous les coups... tailleMax est utilis� alors qu'on ne sais pas si il a �t� initialis� car l'ordre d'initialization n'est pas d�finis dans le standard (si je me trompe pas, encore une fois).


    Sinon, pour la premi�re erreur, v�rifie que class.cpp est bien compil�? De loin �a ressemble a une erreur de link mais j'ai pas l'habitude de ce Code::Blocks...
    Si, tu te trompes...

    En fait, l'ordre d'initialiation est clairement d�finis: il s'agit de l'ordre dans lequel les membres sont d�clar�s au sein de la classe...

    Ainsi, si tu as une classe dans laquelle tu d�clares les membre sous la forme de
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class LaClass
    {
        public:
            LaClass();
            LaClass();
        private:
            T1 membre1;
            T2 membre2;
            T3 membre3;
    };
    Tu es sur que membre1 sera initialis� en premier, membre2 en deuxi�me et membre3 en dernier...

    Certains bons compiltateurs bien r�gl�s te fournissent d'ailleurs un avertissement du genre de "nomdevariable sera initialis� apres"

    En plus, �tant donn� que, ici, il initialise une donn�e avec une information tir�e... de l'argument fournis, il n'y a aucun probl�me

    L� o� il aurait pu y en avoir, cela aurait �t� avec une liste d'initilialistation prenant la forme de
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    string::string(char* ch):tailleMax(strlen(chaine)),chaine(new char[strlen(ch)+1])
    {
     
    }
    car, � ce moment l�, chaine n'est pas encore initialis�e et vaut donc ... n'importe quoi, ce qui pourrait donner une valeur aberrante pour tailleMax
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  13. #13
    Membre Expert
    Avatar de Klaim
    Homme Profil pro
    D�veloppeur de jeux vid�o
    Inscrit en
    Ao�t 2004
    Messages
    1 717
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur de jeux vid�o
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 1 717
    Par d�faut
    Merci de la pr�cision

Discussions similaires

  1. Borland + sqlite (aducom) + string > 256 char = pas conte
    Par spyroux dans le forum C++Builder
    R�ponses: 1
    Dernier message: 16/12/2005, 22h48
  2. R�ponses: 10
    Dernier message: 02/12/2005, 16h23
  3. Evaluation d'une variable string ou char* en C++
    Par Coelacanthe dans le forum SL & STL
    R�ponses: 2
    Dernier message: 08/11/2005, 09h27
  4. Convertir String en Char: comment?
    Par nmathon dans le forum Langage
    R�ponses: 2
    Dernier message: 22/08/2005, 20h58
  5. [Debutant(e)]limitation du String 65536 char
    Par srane dans le forum API standards et tierces
    R�ponses: 8
    Dernier message: 28/05/2004, 23h42

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