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;
}
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;
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)
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.
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.