C++ et includes

Pàgina inicial

Reply to this message
Autor: Hugues Levasseur
Data:  
A: guilde
Assumpte: C++ et includes
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;
}