Problème au linkage

[Résolu]
Signaler
Messages postés
31
Date d'inscription
samedi 22 avril 2006
Statut
Membre
Dernière intervention
18 avril 2011
-
Messages postés
31
Date d'inscription
samedi 22 avril 2006
Statut
Membre
Dernière intervention
18 avril 2011
-
Bonjour, je poste aujourd'hui car j'ai passé la nuit sur le problème qui suit:

(Je tourne sous ubuntu linux, la compilation a lieu avec g++)

J'ai un code qui compile et qui tourne.
Je crée mon header pour bien ranger mes petites fonctions. Et là c'est le drame.
Voici la fonction qui pose problème:

void Tokenize(const string&amp; str,vector<string>&amp; tokens,const string&amp; delimiters = "\t"){
    string::size_type lastPos = str.find_first_not_of(delimiters, 0);
    string::size_type pos     = str.find_first_of(delimiters, lastPos);
    while (string::npos != pos || string::npos != lastPos){
        tokens.push_back(str.substr(lastPos, pos - lastPos));
        lastPos = str.find_first_not_of(delimiters, pos);
        pos = str.find_first_of(delimiters, lastPos);
    }
}


Prototypée comme suit dans le header:
void Tokenize(const string&amp; str,
              vector<string>&amp; tokens,
              const string&amp; delimiters="\t");


Voici l'erreur renvoyée:

jakaaGUI.cpp: In function ‘void Tokenize(const std::string&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, const std::string&)’:
jakaaGUI.cpp:41: error: default argument given for parameter 3 of ‘void Tokenize(const std::string&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, const std::string&)’
jakaa.h:19: error: after previous specification in ‘void Tokenize(const std::string&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, const std::string&)’
make: *** [jakaaGUI.o] Error 1

J'ai deviné que ça pouvait être due à la déclaration dans le prototype: ,const string& delimiters = "\t"
J'ai donc essayé comme suit:


void Tokenize( string& str,vector<string>& tokens, string& delimiters){
  delimiters = "\t"

Et modifié le prototype dans le header en conséquence.
void Tokenize( string& str,vector<string>& tokens, string& delimiters)

Mais une erreur de linkage est apparue:

jakaaDB.o: In function `DataBase::fulfillStructTime(request_Db*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)':
jakaaDB.cpp:(.text+0x4e6): undefined reference to `Tokenize(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'             
jakaaDB.o: In function `DataBase::fulfillStruct(request_Db*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)':                                                                     
jakaaDB.cpp:(.text+0x7e6): undefined reference to `Tokenize(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'             
collect2: ld returned 1 exit status

Pourquoi cette erreur? On diraît que j'ai mal prototypé et que par conséquent il ne connaît pas la fonction. Pourtant j'ai fait du copier-coller... Pardonnez moi si j'ai mal fait, j'ai appris le C++ par moi même.

Ordinateur : moyen conçu pour accélérer et automatiser les erreurs.

2 réponses

Messages postés
31
Date d'inscription
samedi 22 avril 2006
Statut
Membre
Dernière intervention
18 avril 2011
1
Problème corrigé avec l'aide d'un ami.

Il faut passer le paramètre "\t" seulement au prototype du header. Il faut donc déclarer comme suit:
dans le header:

void Tokenize(const string& str,
              vector<string>& tokens,
              const string& delimiters = "\t");

Dans le fichier Cpp:

void Tokenize(const string& str,
              vector<string>& tokens,
              const string& delimiters)

Ordinateur : moyen conçu pour accélérer et automatiser les erreurs.
Messages postés
31
Date d'inscription
samedi 22 avril 2006
Statut
Membre
Dernière intervention
18 avril 2011
1
Petit oubli, si il manque des informations dans ma demande, vous trouverez les sources à cette adresse:
hxxp://www.megafileupload.com/en/file/117750/JakaaV0-1-tar-gz.html

Merci de votre attention.

Ordinateur : moyen conçu pour accélérer et automatiser les erreurs.