Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2244 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Erreur compilation .o

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Erreur compilation .o

n°1249309
gigi12345
Posté le 20-11-2005 à 15:20:30  profilanswer
 

Bonjour j'aurais besoin d'un peu d'aide je debute ne c++ et j'ai mon premier programme avec plusieurs fichiers (fichier d'en-tete .h et fichiers objets .o) mais je narrive pas a compiler mon main.cpp en main .o il me jette lors de la compilation a cause des cout je ne comprends pas :'(
 
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>
 
void strToLong(std::string a, int b=0);
void strToLongDef(std::string c, int d, int e=0);
void strToDouble(std::string f);
void soundEx(std::string g);
 
 
#endif /* !_HELPERS_H */
 
 
 
 
helpers.cpp
 
#include <iostream>
#include <string>
#include "helpers.h"
#include <stdlib.h>
#include <stdio.h>
 
using std::cout;
using std::endl;
using std::string;
 
long strToLong(string const & chaine,int base=0)
{
  char * pEnd;
  long result = strtol(chaine.c_str(),&pEnd,base);
  return result;
}
 
long strToLongDef(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(string const & chaine)
{
  char * pEnd;
  return strtod(chaine.c_str(),&pEnd);
}
 
string soundEx(string  const & chaine)
{
  string result="";
  int indexChaine=0;
  int indexResult=0;
  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;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;
 
}
 
le helpers.h et helpers.cpp compile en .o sans message d'erreur :) mais pas le main.cpp
 
make helpers.o -> ok
make main.o -> ko
 
merci de m'éclairer  

mood
Publicité
Posté le 20-11-2005 à 15:20:30  profilanswer
 

n°1249313
morph
Posté le 20-11-2005 à 15:31:15  profilanswer
 

dans ton helpers.h, les prototypes de tes fonctions sont incorrectes
 

Code :
  1. long strToLong(std::string a, int b=0);
  2. double strToLongDef(std::string c, int d, int e=0);
  3. double strToDouble(std::string f);
  4. std::string soundEx(std::string g);

n°1249318
gigi12345
Posté le 20-11-2005 à 15:42:49  profilanswer
 

merci bcp ca compile le helpers.o mais j'ai maintenant une erreur quand je compile le tout :'(
g++ main.o helpers.o -o monfichier je cherche l'erreur mais si vous trouvez je veux bien la solution ca fait des heures que je suis dessus et oui c'est dur de débuter :'(

n°1249320
_darkalt3_
Proctopathe
Posté le 20-11-2005 à 15:46:42  profilanswer
 

ben quelle est l'erreur ?

n°1249322
gigi12345
Posté le 20-11-2005 à 15:53:39  profilanswer
 

g++ main.o helpers.o -o test
main.o: In function `main':
main.cpp:(.text+0x51): undefined reference to `strToLong(std::basic_string<char,                                            std::char_traits<char>, std::allocator<char> >, int)'
main.cpp:(.text+0x8c): undefined reference to `strToLong(std::basic_string<char,                                            std::char_traits<char>, std::allocator<char> >, int)'
main.cpp:(.text+0xc7): undefined reference to `strToLong(std::basic_string<char,                                            std::char_traits<char>, std::allocator<char> >, int)'
main.cpp:(.text+0x264): undefined reference to `strToLongDef(std::basic_string<c                                           har, std::char_traits<char>, std::allocator<char> >, int, int)'
main.cpp:(.text+0x321): undefined reference to `strToDouble(std::basic_string<ch                                           ar, std::char_traits<char>, std::allocator<char> > )'
main.cpp:(.text+0x35a): undefined reference to `strToDouble(std::basic_string<ch                                           ar, std::char_traits<char>, std::allocator<char> > )'
main.cpp:(.text+0x48f): undefined reference to `soundEx(std::basic_string<char,                                            std::char_traits<char>, std::allocator<char> > )'
main.cpp:(.text+0x4c9): undefined reference to `soundEx(std::basic_string<char,                                            std::char_traits<char>, std::allocator<char> > )'
main.cpp:(.text+0x503): undefined reference to `soundEx(std::basic_string<char,                                            std::char_traits<char>, std::allocator<char> > )'
main.cpp:(.text+0x53d): undefined reference to `soundEx(std::basic_string<char,                                            std::char_traits<char>, std::allocator<char> > )'
collect2: ld returned 1 exit status

n°1249325
_darkalt3_
Proctopathe
Posté le 20-11-2005 à 15:57:54  profilanswer
 

ta méthode de compilation est mauvaise, tes fichiers ne se linkent pas

n°1249328
gigi12345
Posté le 20-11-2005 à 16:00:42  profilanswer
 

ben je compile sous mandrake ;)

n°1249329
morph
Posté le 20-11-2005 à 16:01:20  profilanswer
 

il est important que la définition d'une fonction possède exactement le même prototype que sa déclaration
 
helpers.h
long strToLong(std::string a, int b=0);
helpers.ccp
long strToLong(std::string a, int b)
{
...
}

n°1249336
gigi12345
Posté le 20-11-2005 à 16:10:37  profilanswer
 

Ca tourne je vous dit un grand merci pour le temps que vous m'avez conacré.
 
Merci :D

n°1258986
costadelo9​5
RuN OuT PoN DeM
Posté le 05-12-2005 à 12:56:21  profilanswer
 

Bonjour, je viens juste de tester ton prog, et lors de la compilation j'ai l'erreur suivante qui s'affiche :  
 
root@machine:make helpers.o
 
g++ -W -Wall -Werror -O2   -c -o helpers.o helpers.cpp
cc1plus: warnings being treated as errors
helpers.cpp: In function ‘std::string soundEx(const std::string& )’:
helpers.cpp:54: warning: statement has no effect
make: *** [helpers.o] Erreur 1
 
Cela viens apparement de la declaration de ta fonction soundEx dans le fichier helpers.cpp :
 
string soundEx(string const &chaine)
 
Dans le fichier helpers.h, elle est declaree comme suit :
 
std::string soundEx(std::string g);
 
Mais on remarque aussi que la boucle for de la ligne 54 ne fonctionne pas :
 
for(indexChaine;indexChaine<chaine.size()&&result.size()<4;indexChaine++)
 
Ce qui je pense, est cense fonctionner... Si quelqu'un peut repondre a cette question, j'en serai ravis.  
Merci d'avance.


Message édité par costadelo95 le 05-12-2005 à 13:03:43
mood
Publicité
Posté le 05-12-2005 à 12:56:21  profilanswer
 

n°1258989
costadelo9​5
RuN OuT PoN DeM
Posté le 05-12-2005 à 13:06:34  profilanswer
 

GGRRRRRRRRR, naoik, vraiment desole :
 
for(indexChaine=0;indexChaine<chaine.size()&&result.size()<4;indexChaine++)
 
Tout connement. Merci quand meme.

n°1258994
costadelo9​5
RuN OuT PoN DeM
Posté le 05-12-2005 à 13:21:52  profilanswer
 

Le retour de l'(HORREUR) erreur :
 
Bon, et bien jusqu'au post d'avant tout allait bien, lorsque tout a coup, lors de l'edition de liens, CATASTROPHE :
 
root@machine:g++ main.o helpers.o -o lien
 
Il m'affiche ensuite des erreurs du type :  
 
main.o: dans la fonction « main »:
main.cpp:(.text+0xa7): référence indéfinie vers « strToLong(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, int)»
 
main.o:main.cpp:(.text+0xcb0): encore plus de références indéfinies suivent vers « soundEx(std::basic_string<char, std::char_traits<char>, std::allocator<char> > )»
collect2: ld returned 1 exit status
 
 
MAIS QUE CE PASSE T'IL ????  
 
 
 
 
 
 

n°1259039
Taz
bisounours-codeur
Posté le 05-12-2005 à 14:12:03  profilanswer
 

t'es root c'est pour ça.

n°1259047
costadelo9​5
RuN OuT PoN DeM
Posté le 05-12-2005 à 14:18:52  profilanswer
 

Euh... j'ai bien peur de te decevoir, mais ca serait aussi simple... j'ai mis "root@machine" simplement pour illustrer mon pb lorsque j'execute mon edition de lien, c'est tout. Sur la machine je ne suis pas en root, mais sous un login perso.

n°1259056
Taz
bisounours-codeur
Posté le 05-12-2005 à 14:29:53  profilanswer
 

#include <string>

n°1259072
costadelo9​5
RuN OuT PoN DeM
Posté le 05-12-2005 à 14:40:04  profilanswer
 

Non plus, cette directive est presente dans mes 3 pages, helpers.h, helpers.cpp, main.cpp.
QUE CE PASSE T'IL SVP??????


Message édité par costadelo95 le 06-12-2005 à 10:46:29
n°1259905
costadelo9​5
RuN OuT PoN DeM
Posté le 06-12-2005 à 12:09:40  profilanswer
 

J'arrête pas de retourner le problème dans tous les sens sans trouver, pourriez vous m'orienter SVP ?

n°1259932
Taz
bisounours-codeur
Posté le 06-12-2005 à 12:48:29  profilanswer
 

compile tout en -Wall

n°1259951
costadelo9​5
RuN OuT PoN DeM
Posté le 06-12-2005 à 13:19:28  profilanswer
 

Merci jvais essayé.
 
Edit : Ca ne change rien


Message édité par costadelo95 le 06-12-2005 à 16:19:36

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Erreur compilation .o

 

Sujets relatifs
erreur à la compilationerreur de compilation en c++(Devcpp):no such file or directory
erreur de compilation sous access 97[VS2005][C#] Erreur à la compilation: namespace non trouvé
erreur a la compilation comprend pas ??JOptionPane --> erreur à la compilation
[glut] erreur à la compilationerreur de compilation
erreur compilation gcc parse error at the end of input[GTK & C++] compilation de classe avec erreur
Plus de sujets relatifs à : Erreur compilation .o


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR