begin process at 2010 02 10 11:25:22
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

compilation .o


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

compilation .o

mardi 6 décembre 2005 à 15:57:42 | compilation .o

xantro

bonjour a tous et a toutes.

J'aurai besoin d 'un coup de main pour un probleme de compilation.
Voila, j'ai mon programme avec plusieurs fichiers (fichier d'en-tete .h et fichiers objets .o). Voici le prog :.


main.cpp

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

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

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





helpers.h


#ifndef _HELPERS_H
# define _HELPERS_H

#include <string>

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

#endif /* !_HELPERS_H */




helpers.cpp

#include <iostream>
#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;
}

Seulement voila, le main.o et le helpers.o compile parfaitement mais c est au moment de faire les links aue ca pose probleme.
Quand je veux faire les liens avec la commande

g++ main.o helpers.o -o lien

j ai les message d erreurs suivant :

main.cpp:(.text+0x8a): référence indéfinie vers « strToLong(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int)»

main.cpp:(.text+0x148): référence indéfinie vers « strToLongDef(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, int)»

main.cpp:(.text+0x185): référence indéfinie vers « strToDouble(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)»

main.cpp:(.text+0x20d): référence indéfinie vers « soundEx(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)»


Voila rien que ca 

Donc je suis sur que le probleme vient des links, mais j ai beau observe mon code la définition de mes fonctions possède exactement le même prototype que sa déclaration.

En clair, je vois pas d'ou vient le probleme.

Donc voila je suis au point mort et si vous pouviez m aider je vous en serez infiniment reconnaissant .
mardi 6 décembre 2005 à 16:01:54 | Re : compilation .o

xantro

arf desole tout mon code s est mis sur une seule ligne je sais pas pourquoi.

mardi 6 décembre 2005 à 16:24:24 | Re : compilation .o

xantro

Voila je vais essayer de remettre a peu pres correctement


helpers.h


#ifndef _HELPERS_H
# define _HELPERS_H

#include <string>

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

#endif /* !_HELPERS_H */





helpers.cpp


#include <iostream>
#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;
}
Voila j espere que ce sera plus clair

mardi 6 décembre 2005 à 16:31:16 | Re : compilation .o

ymca2003

dans le .h :
long strToLong(std::string const a, int b=0);

dans le .cpp :
long strToLong(std::string const & chaine,int base=0)


mardi 6 décembre 2005 à 16:32:33 | Re : compilation .o

ymca2003

Il manque la fin de ma réponse :

dans le .cpp il y a une réfence sur une string
mardi 6 décembre 2005 à 16:41:05 | Re : compilation .o

xantro

j ai deja essaye de faire ca dans le .h :

long strToLong(std::string const & a, int b=0);

mais pas de changement, meme message d erreur.

P.S : Si j ai mal compris ta reponse, merci de m expliquer et de me pardonner

mardi 6 décembre 2005 à 17:07:14 | Re : compilation .o

xantro

c est bon je pense avoir trouve.

En fait le & devait se trouver dans le helpers.h mais pas dans le helpers.cpp

Apres on verra si le retse du programme se passe bien ^^



Cette discussion est classée dans : string, chaine, case, result, std


Répondre à ce message

Sujets en rapport avec ce message

Problème de compilation [ par killer75 ] Voici donc mon pb:helpers.h #ifndef _HELPERS_H# define _HELPERS_H#include long strToLong(std::string const &a, int b);long strToLongDef(std::stri probleme d'une chaine de caracteres [ par bilaloch ] Bonjour a tous,J'ai un ptit probleme au niveau d'une manipulation sur une chaine de caracteres. Voici le code : std::string *position = <FONT color=# Casts [ par wismerhill__ ] Bonjour, je debute en c++ et j'aimerais savoir comment faire pour caster une chaine std::string en std double.Je m'explique, en vba il est possible de conversion string (binaire) to string (hexa) [ par janiaut ] Bonjour, voila je susi toujours dans mon big programme, j'ai un petit problème sur une conversion d'un string (de mot binaire) en conversion de string Pb mix managed et unmanaged c++ [ par mastercatz ] Bonjour.J'essaye de faire une classe managée qui servira de wrapper entre mon projet c# et une classe c++ native.Mon problème est que le compilateur m std::string to LowerCase [ par TeLeTUbIz ] Salut !   Ayant la fleme de programmer cet algo, je voudrais savoir si qqu'un connait une méthode rapide de changement de casse d'un std::string.Voilà pb avec les string !!! [ par ElectricalMan ] slt,j'ai qqs "erreurs" à la compilation ! c à s'arracher les cheveux, pouvez vous m'aider svp : #include  #include #include using namespace std;< remplacer une chaine par une variable [ par abdoulax ] Bonjour,J'ai une chaine :"ceci est un test %result% fin du test"qui contient la chaine "%result%".Comment puis je remplacer la chaine "%result%" par u probleme de map erreur de link [ par hisoka56 ] Bonjour, j'ai un problème de link: Linking... edition.obj : error LNK2019: unresolved external symbol __imp___CrtDbgReportW referenced in .... Cela String [ par MadMax1024 ] Bonjour ou Rebonjour comme vous le sentezEncore besoin de vos conseils.Dans ma fonction principale (main) je fait appel à une fonction externe qui me


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,562 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales