Partage
  • Partager sur Facebook
  • Partager sur Twitter

Undefined reference to "function"

TP le mot mystère

    17 octobre 2019 à 14:34:06

    Bonjour,

    je débute en C++. je viens de terminer le TP du mot mystère. Très bien ça marchait tant que tout était dans le 'main.cpp'. 

    Voulant me familiariser avec les fonctions, j'en ai créée une avec qui mélange les lettre du mot mystère.

    Cependant, lorsque je compile, j'ai une erreur qui me prend singulièrement bien la tête. J'ai beau éplucher les forums, je n'arrive pas à prendre le dessus.

    Je code avec l'IDE Code Blocks.

    Voici le main.cpp

    #include <iostream>
    #include <string>  // Permet de créer des chaînes de caractères.
    #include <fstream> // Permet d'ouvrir et de lire un fichier
    #include <ctime> // Permet de construire le mot aléatoire
    #include <cstdlib> // Permet de construire le mot aléatoire
    #include "melangeur2Mot.h" // appelle le fichier à en-tête pour appeler la fonction "melangeur2Mot"
    
    using namespace std;
    
    // On définit le chemin ou se trouve le fichier texte!
    
    string path("D:/data_mat/Documents/Documents/Travail/PostDoc/Programmation/cours_Cpp/mot_mystere/");
    string const pathFileMystere(path+="mystere.txt");
    
    int main()
    {
        /*
        - motMystere: mot à trouver
        -motMelange: mot mystère aléatoirment mélangé
        - motTest: réponse entrée par l'utilisateur du programme
        */
        string motMystere,motMelange,motTest; // définition des varaiables à utiliser.
    
       // srand(time(0));
        ifstream  fichier(pathFileMystere); // On ouvre et lit le fichier contenant le mot mystère
    
         if(fichier) // Condition permettant de savoir si le fichier est ouvert et lu correctement.
         {
    
            while(getline(fichier, motMystere)) //Tant qu'on n'est pas à la fin, on lit
    
    
        motMelange=melangeur2Mot(motMystere);  // fonction mélangeant le mot mystère
    
        cout << "Trouve le mot mystere mecreant, ou EM viendra te lacrymogeniser: "<<endl;
        cout << motMelange << endl; // le mot mystère est mélangé
         }
         else
         {
            cout<< "ERREUR: Impossible d'ouvrir le fichier en lecture." <<endl;
            // Le message d'erreur apparait si le fichier n'a pu être lu.
         }
    
    
            do // On demande à l'utilisateur de trouver le mot mystère
                // L'opération est effectuée jusqu'à ce que le mot soit trouvé.
       {
          cin >> motTest;
    
         int tailleMotTest(motTest.size()), tailleMotMystere(motMystere.size());
    
          if (motTest == motMystere)
          {
             cout << "Bravo! Tu as déjà pensé au doctorat mention ''des chiffres et des lettres''?" << endl;
          }
          else if (tailleMotTest!=tailleMotMystere)
          {
              cout << "Après à compter! Le mot mystere contient: " << tailleMotMystere << " lettres" << endl;
          }
          else
          {
             cout << "Ce n'est pas le mot !" << endl;
          }
       }while (motTest != motMystere); // On continue jusqu'à ce que les mots correspondent.
       //On recommence tant qu'il n'a pas trouvé
    
    
        return 0;
    }



    Le fichier à en-tête:

    #ifndef MELANGEUR2MOT_H_INCLUDED
    #define MELANGEUR2MOT_H_INCLUDED
    #include<string>
    #include <ctime>
    #include <cstdlib>
    
    std::string melangeur2Mot(std::string const& mot);
    
    /*
    J'ai mis un passage par référence constante, pour éviter que le mot mystère ne soit modifié
    pendant l'opération de mélange des lettrtes
    */
    
    #endif // MELANGEUR2MOT_H_INCLUDED

    et enfin la fonction: melangeur2Mot.cpp

    #include "melangeur2Mot.h"
    
    /*
    Le "mélangeur de mot" est un programme qui mélange aléatoirement
    les lettres du mot.
    */
    
    string melangeur2Mot(string const& mot)
    {
        int const tailleMot(mot.size());
        int position;
        string motMelange;
    
        srand(time(0));
    
        for(int i(0);i<tailleMot; i++)
          {
          position = rand() % mot.size(); // On détermine aléatoirement la position d'une lettre
          motMelange[i]=mot[position]; // On affecte la letttre tirée au sort de la nouvelle chaine de caracère "motMelange".
          mot.erase(position, 1);  // Pour ne pas piocher plusieurs fois la même lettre, on retire la lettre tirée au sort.
          }
    
          return motMelange;
    }


    Si jamais l'un ou l'une d'entre vous arrive à arrêter d'aller pleurer dans un coin de ma chambre, je vous en serait reconnaissant.

    A tutti!



    -
    Edité par MathiasRojo 17 octobre 2019 à 14:36:06

    • Partager sur Facebook
    • Partager sur Twitter
      18 octobre 2019 à 10:10:23

      Lu'!

      Changes de cours. Il apprend un sacré paquet d'âneries à ne pas faire, en plus de montrer des exemples de code buggés et d'être obsolète (quelques recherches sur le forum t'en diront plus). Prends plutôt le tutoriel disponible sur Zeste de Savoir. Si tu préfères un cours déjà complet, tourne toi vers le C++ Primer de Lippman dans sa dernière édition (en anglais), il sera un poil moins à jour mais c'est un bon cours.

      Quelques problèmes généraux sur ton code ;

      MathiasRojo a écrit:

      J'ai mis un passage par référence constante, pour éviter que le mot mystère ne soit modifié pendant l'opération de mélange des lettrtes

      Tu pourrais aussi simplement recevoir une copie de la chaîne, ce serait même plus simple. Et pour le mélange en C++, tu peux utiliser std::shuffle.

      Concernant ton problème c'est assez commun avec l'IDE Code::Blocks, qui est un choix douteux d'IDE, tu as ajouter le fichier dans les dossiers du projet mais tu ne l'as pas ajouté comme cible de compilation. Clique doit sur le fichier CPP, propriétés, build et vérifier qu'il est coché comme cible de compilation.

      -
      Edité par Ksass`Peuk 19 octobre 2019 à 15:53:17

      • Partager sur Facebook
      • Partager sur Twitter

      Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

        18 octobre 2019 à 13:57:19

        Salut

        Très bien ça marchait tant que tout était dans le 'main.cpp'.

        Là ça ne fonctionnera plus, concernant ta fonction melangeur2Mot(), tu passes ta chaine de caractères en référence const mais tu essaies de la modifier avec la fonction membre erase().

        Mais de tout façon Ksass`Peuk t'a donné tous les liens nécessaires.

        • Partager sur Facebook
        • Partager sur Twitter

        Undefined reference to "function"

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown