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:
[code]
void Tokenize(const string& str,vector<string>& tokens,const string& 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);
}
}
[/code]
Prototypée comme suit dans le header:
[code]void Tokenize(const string& str,
vector<string>& tokens,
const string& delimiters="\t");[/code]
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.