Bonsoir la guilde,
Je me remet au C++, et j'ai un soucis "de base" .
Je code un convertisseur binaire/décimal avec toutes mes fonctions dans
le même fichier : Ça fonctionne (binaire-V4.cpp)
Je déplace mes fonctions dans un .h et un .cpp : Ça ne compile plus
hugues@xig:~/Documents/Exos/C++-B2$ make -k binaire-V5
g++ binaire-V5.cpp -o binaire-V5
/usr/bin/ld : /tmp/ccz1TIIx.o : dans la fonction « main » :
binaire-V5.cpp:(.text+0x73) : référence indéfinie vers
« CleanBin(std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >&) »
/usr/bin/ld : binaire-V5.cpp:(.text+0x96) : référence indéfinie vers
« Bin2Dec(std::__cxx11::basic_string<char, std::char_traits<char>,
std::allocator<char> >) »
collect2: error: ld returned 1 exit status
make: *** [<commande interne>: binaire-V5] Error 1
Quelqu'un à une idée ?
Hugues
#include <iostream>
#include <math.h>
using namespace std;
/**
* \brief Convertit un binaire en décimal
* \param string le nombre binaire
* \return int le nombre décimal
*/
int Bin2Dec(string binaire) {
int indice, puissance(0), resultat(0);
for (indice = binaire.length() - 1; indice >= 0; indice--) {
if (binaire[indice] == '1') {
resultat += pow(2, puissance);
}
puissance++;
}
return resultat;
}
/**
* \brief Nettoie une chaine binaire. ne laisse paser que les 1 et les 0
* \param (entree sortie) string le nombre binaire
* \return bool false si caractere interdit en entree
*/
bool CleanBin(string& binaire) {
int indice;
string sortie;
for (indice = 0; indice < binaire.length(); indice++) {
if (binaire[indice] == '0' || binaire[indice] == '1') {
sortie += binaire[indice];
} else if (binaire[indice] != '.') {
cout << binaire[indice] << endl; //§
return false;
}
}
binaire = sortie;
return true;
}
int main(int argc, char* argv[]){
int i, retour(0);
string binaire;
for(i = 1; i < argc; i++) {
binaire = argv[i];
if(CleanBin(binaire)) {
cout << Bin2Dec(binaire) << endl;
} else {
cout << "Erreur " << argv[1] << " nâest pas un nombre binaire" << endl;
retour++;
}
}
return retour;
}
#ifndef FONCTIONS_H_INCLUDED
#define FONCTIONS_H_INCLUDED
#include <iostream>
#include <math.h>
#include <string>
/**
* \brief Convertit un binaire en décimal
* \param string le nombre binaire
* \return int le nombre décimal
*/
int Bin2Dec(std::string binaire);
/**
* \brief Nettoie une chaine binaire. ne laisse paser que les 1 et les 0
* \param (entree sortie) string le nombre binaire
* \return bool false si caractere interdit en entree
*/
bool CleanBin(std::string& binaire);
#endif // FONCTIONS_H_INCLUDED
#include "fonctions.h"
using namespace std ;
int Bin2Dec(string binaire) {
int indice, puissance(0), resultat(0);
for (indice = binaire.length() - 1; indice >= 0; indice--) {
if (binaire[indice] == '1') {
resultat += pow(2, puissance);
}
puissance++;
}
return resultat;
}
bool CleanBin(string& binaire) {
int indice;
string sortie;
for (indice = 0; indice < binaire.length(); indice++) {
if (binaire[indice] == '0' || binaire[indice] == '1') {
sortie += binaire[indice];
} else if (binaire[indice] != '.') {
cout << binaire[indice] << endl; //§
return false;
}
}
binaire = sortie;
return true;
}
#include <iostream>
#include <math.h>
#include "fonctions.h"
using namespace std;
int main(int argc, char* argv[]){
int i, retour(0);
string binaire;
for(i = 1; i < argc; i++) {
binaire = argv[i];
if(CleanBin(binaire)) {
cout << Bin2Dec(binaire) << endl;
} else {
cout << "Erreur " << argv[1] << " nâest pas un nombre binaire" << endl;
retour++;
}
}
return retour;
}