Erreur "basic_string"
lgslgs
-
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je suis entrain de faire de la programmation modulaire mais j'ai ceci comme erreur dans main.cpp
au niveau de l'appel de la fonction ChoisirMot "undifined reference to 'ChoisirMot(std::_cxxl::basic_string<char, std::char_traits<c...' "
C'ets la seule erreur que j'ai.
Voici mes trois fichiers
(main.cpp)
(fonction.cpp)
(fonction.h)
Aidez moi svp
Je suis entrain de faire de la programmation modulaire mais j'ai ceci comme erreur dans main.cpp
au niveau de l'appel de la fonction ChoisirMot "undifined reference to 'ChoisirMot(std::_cxxl::basic_string<char, std::char_traits<c...' "
C'ets la seule erreur que j'ai.
Voici mes trois fichiers
(main.cpp)
#include <iostream>
#include <ctime>
#include <cstdlib>
#include "fonction.h"
using namespace std;
int main()
{
int taille=20;
string tab[taille]={"un", "deux", "cinq", "rouge", "membre", "conseil", "donner", "reponse", "etat", "son", "armement", "peu", "apres", "vacances", "annonce", "mercredi", "evident", "regime", "affirmer", "arme"};
string mot_cache=ChoisirMot(tab, taille);
cout << mot_cache;
return 0;
}
(fonction.cpp)
#include "fonction.h"
#include <ctime>
#include <cstdlib>
using namespace std;
char GetCaractere()
{
char lettre;
cout << "Proposez une lettre:";
cin >> lettre;
return lettre;
}
int GetNombreAlleatoire(int min=1, int max=20)
{
srand(time(NULL));
return rand()%max;
}
string ChoisirMot(string mots[], int taille)
{
int pos=GetNombreAlleatoire(1, 20);
return mots[pos];
}
(fonction.h)
#include <iostream> #include <string> #ifndef FONCTION_H_INCLUDED #define FONCTION_H_INCLUDED char GetCaractere(); int GetNombreAlleatoire(int min, int max); std::string ChoisirMot(std::string mots[], int taille); void IntEtoile(std::string& mot); bool TestCaractere(char lettre, std::string& mot, std::string motCache); bool TestGagne(std::string mot); #endif // FONCTION_H_INCLUDED
Aidez moi svp
1 réponse
-
Bonjour lgslgs,
Les erreurs "undefined reference to ..." sont des erreurs du linker. A ce stade là, la compilation de ce que tu as demandé à compiler s'est bien passée, mais l'éditeur de liaison ne sait pas fabriquer un exécutable avec les fichiers objet produits par la compilation, car certains font référence à des objets qu'ils ne trouve pas.
Compiles tu bien fonction.cpp et est-ce que tu passes bien le fichier objet fonction.o au linker ?
En ligne de commande, sous Linux :
$ g++ -Wall main.cpp fonction.cpp
$ ./a.out
evident
... pas d'erreur chez moi :-)
Sur un autre plan, tu ne devrais pas mettre l'initialisation du générateur de nombres pseudo aléatoiressrand(time(NULL));
dans ta fonctionGetNombreAlleatoire()
(note aussi que tu peux retirer un "L"), car si un jour tu décides d'appeler cette fonction plusieurs fois par seconde, elle renverra le même nombre (bien que cela ne soit pas spécifié par le standard du C,time(NULL)
renvoie la date actuelle en général sous la forme du nombre de secondes depuis le 1er Janvier 1970, donc avec une résolution d'une seconde).
Dal-
-
si tu utilises Codeblocks, et que tes fichiers fonction.cpp et fonction.h ont correctement été ajoutés à ton projet, Codeblocks va gérer leur compilation et la liaison avec MinGW.
comment as-tu ajouté fonction.cpp et fonction.h à ton projet (il ne suffit pas de copier ces fichiers dans le répertoire où se trouve main.cpp, ou de faireFile - Open
) ?
pour créer des nouveaux fichiers sources ou entêtes rattachés à ton projet Codeblocks, tu dois utiliserFile - New... - File
et choisir le type de fichier à ajouter au projet en partant d'un fichier vierge. Ou, si le fichier existe déjà et que tu ne veux pas le créer, tu peux l'ajouter en faisantProject - Add files ...
...
quand les fichiers sont rattachés au projet, les fichiers sources .cpp apparaissent dans l'arborescence de gauche dans un sous-dossier "Sources" avec main.cpp et les entêtes apparaissent dans un sous-dossier "Headers"
quelque chose similaire à cela (c'est un exemple C) :

Et sur la fonction GetNombreAlleatoire(), ça marche correctement car il me renvoie differents nombres
je suppose que tu considères qu'elle marche correctement parce que tu ne l'appelles pas plus d'une fois par seconde, comme j'ai essayé de te l'expliquer... essaye ceci :-)
for (int n = 0; n < 10; n++) { cout << "Nombre = " << GetNombreAlleatoire(1, 10) << endl; }
"aléatoire" s'écrit avec un seul L -
-
-
-