Erreur "basic_string"
lgslgs
-
[Dal] Messages postés 6373 Statut Contributeur -
[Dal] Messages postés 6373 Statut Contributeur -
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
A voir également:
- Erreur "basic_string"
- Erreur 0x80070643 - Accueil - Windows
- Erreur 4101 france tv - Forum Lecteurs et supports vidéo
- Erreur 4201 france tv ✓ - Forum Réseaux sociaux
- Code erreur f3500-31 ✓ - Forum Bbox Bouygues
- J'aime par erreur facebook notification - Forum Facebook
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 :
... pas d'erreur chez moi :-)
Sur un autre plan, tu ne devrais pas mettre l'initialisation du générateur de nombres pseudo aléatoires
Dal
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éatoires
srand(time(NULL));dans ta fonction
GetNombreAlleatoire()(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
J'utilise un IDE (codeblocks) pour compiler. Et sur la fonction GetNombreAlleatoire(), ça marche correctement car il me renvoie differents nombres
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 faire ) ?
pour créer des nouveaux fichiers sources ou entêtes rattachés à ton projet Codeblocks, tu dois utiliser 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 faisant ...
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
C'est ce que j'ai