Problème de compilation

Résolu
cs_killer75 Messages postés 14 Date d'inscription lundi 20 novembre 2006 Statut Membre Dernière intervention 19 décembre 2006 - 20 nov. 2006 à 16:11
cs_killer75 Messages postés 14 Date d'inscription lundi 20 novembre 2006 Statut Membre Dernière intervention 19 décembre 2006 - 20 nov. 2006 à 17:47
Voici donc mon pb:

helpers.h


#ifndef _HELPERS_H
# define _HELPERS_H
#include <string>


long strToLong(std::string const &a, int b);
long strToLongDef(std::string const c, int d, int e=0);
double strToDouble(std::string const f);
std::string soundEx(std::string const g);


#endif /* !_HELPERS_H */




helpers.cpp


#include
#include <string>
#include "helpers.h"


using std::cout;
using std::endl;


long strToLong(std::string const &chaine,int base=0) {
        char * pEnd;
        long result = strtol(chaine.c_str(),&pEnd,base);
        return result;
}


long strToLongDef(std::string const & chaine,int defaut,int base=0) {
        char * pEnd;
        long result = strtol(chaine.c_str(),&pEnd,base);
        if(result==0 && chaine!="0")
                return defaut;
        else
                return result;
}


double strToDouble(std::string const & chaine) {
        char * pEnd;
        return strtod(chaine.c_str(),&pEnd);
}


std::string soundEx(std::string const & chaine) {
        std::string result="";
        unsigned int indexChaine=0;
        int indexResult=0;
        std::string lettre="";
        if(chaine[indexChaine]!='\0') {
                if(chaine[indexChaine]>='a' & chaine[indexChaine]<='z') {
                        result += chaine[indexChaine++]-'a'+'A';
                }
                else {
                        result += chaine[indexChaine++];
                }
                indexResult++;
        }
        else {
                result+='0';
        }
        for(indexChaine=0;indexChaine<chaine.size()&&result.size()<4;indexChaine++) {
                char lettre;
                if(chaine[indexChaine]>='a' & chaine[indexChaine]<='z') {
                        lettre = chaine[indexChaine]-'a'+'A';
                }
                else {
                        lettre = chaine[indexChaine];
                }
                switch(lettre) {
                        case 'A':
                        case 'E':
                        case 'I':
                        case 'O':
                        case 'U':
                        case 'Y':
                        case 'H':
                        case 'W':
                        break;
                        case 'B':
                        case 'F':
                        case 'P':
                        case 'V':
                        if(result[indexResult]!='1')
                                result+="1";
                        break;
                        case 'C':
                        case 'G':
                        case 'J':
                        case 'K':
                        case 'Q':
                        case 'S':
                        case 'X':
                        case 'Z':
                        if(result[indexResult]!='2')
                                result+="2";
                        break;
                        case 'D':
                        case 'T':
                        if(result[indexResult]!='3')
                                result+="3";
                        break;
                        case 'L':
                        if(result[indexResult]!='4')
                                result+="4";
                        break;
                        case 'M':
                        case 'N':
                        if(result[indexResult]!='5')
                                result+="5";
                        break;
                        case 'R':
                        if(result[indexResult]!='6')
                                result+="6";
                        break;
                }
        }
        if(result.size()<=4) {
                for(unsigned i=result.size();i<4;i++) {
                        result+='0';
                }
        }
        return result;
}




main.cpp


#include
#include <string>
#include "helpers.h"
using std::cout;
using std::endl;
using std::string;


int main(void) {
        cout << strToLong("1234", 10) << endl;
        cout << strToLongDef("0x2a", -1) << endl;
        cout << strToDouble("143.17") << endl;
        cout << soundEx("Robert") << endl;
        return 0;
}


 




Voici ce que j'obtiens en faisant:
g++ -O2 -Wall -W -Werror  -O2  main.cpp   -o main
/tmp/ccg2wa36.o: In function `main':
main.cpp:(.text+0xac): undefined reference to `strToLong(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)'
main.cpp:(.text+0x109): undefined reference to `strToLongDef(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int)'
main.cpp:(.text+0x152): undefined reference to `strToDouble(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
main.cpp:(.text+0x1a2): undefined reference to `soundEx(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
collect2: ld returned 1 exit status
make: *** [main] Error 1


Si quelqu'un pouvait m'aider ca sera sympa
merci d'avance

6 réponses

cs_killer75 Messages postés 14 Date d'inscription lundi 20 novembre 2006 Statut Membre Dernière intervention 19 décembre 2006
20 nov. 2006 à 17:47
Dsl c'est bon réponse résolu Merci de votre aide,
effectivement le pb ne venai pas de ma compilation mais de mes déclarations qui nétaient pas vraiment identique donc pour les prochains je précise:

Dans mon helpers.h j'avais:
long strToLong(std::string const a, int b=0);
long strToLongDef(std::string const c, int d, int e=0);
double strToDouble(std::string const f);
std::string soundEx(std::string const g);

et dans mon helpers.cpp j'avais:
long strToLong(std::string const& chaine,int base) {
...
}
long strToLongDef(std::string const& chaine,int defaut,int base) {
...
}
double strToDouble(std::string const& chaine ) {
...
}
std::string soundEx(std::string const& chaine) {
...
}

J'ai donc tout simplement réctifié mon helpers.h comme ceci:
long strToLong(std::string const& a, int b=0);
long strToLongDef(std::string const& c, int d, int e=0);
double strToDouble(std::string const& f);
std::string soundEx(std::string const& g);

Donc voila si ca peut évité à d'autres de faires les memes erreurs...
Je tiens aussi à remercier Jean-Marc.Bourguet et Laurent Gomila (d'un autre forum pour leur aide)
3
mad_love_disease Messages postés 64 Date d'inscription lundi 20 octobre 2003 Statut Membre Dernière intervention 1 juillet 2010 3
20 nov. 2006 à 16:27
Salut,

Peut etre que ton define _HELPERS_H_ existe déja, essaye de le changer. Sinon, la comme ca je ne vois pas. Je vais regarder de plus pres.

Mad Love Disease
0
cs_killer75 Messages postés 14 Date d'inscription lundi 20 novembre 2006 Statut Membre Dernière intervention 19 décembre 2006
20 nov. 2006 à 16:29
Merci de ton aide
0
cs_killer75 Messages postés 14 Date d'inscription lundi 20 novembre 2006 Statut Membre Dernière intervention 19 décembre 2006
20 nov. 2006 à 16:32
J'ai changé  avec un  define _TEST_H_ et j'ai tjs le meme resultat ....
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mad_love_disease Messages postés 64 Date d'inscription lundi 20 octobre 2003 Statut Membre Dernière intervention 1 juillet 2010 3
20 nov. 2006 à 16:48
Oui, je viens de faire la meme chose,

J'ai reussi a compiler et executer en mettant tout dans le .h, c'est certainement parceque ce sont des fonctions et pas les méthodes d'une classe. (entete.h/code.cpp ne fonctionnerai pas pour des fonctions? J'ai toujours coder en classe alors vala je ne savais pas, A Verifier bien sur.) Bref, il ya quelques erreurs de code mais sinon ca marche.

Bon courage.

Mad Love Disease
0
mad_love_disease Messages postés 64 Date d'inscription lundi 20 octobre 2003 Statut Membre Dernière intervention 1 juillet 2010 3
20 nov. 2006 à 17:01
Yo,

C'est encore moi. Je viens reparer les betises que je viens de dire. En fait fonction ou méthodes cela revient au meme. C'est juste qu'il faut d'abord compiler le code de helper.h pour que le linker trouve tes fonctions. Bref, un bon petit makefile fera l'affaire. En effet, la ligne de compilation g++ main.cpp ne suffit pas.

Mad Love Disease
0
Rejoignez-nous