Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 01/04/2020, à 21:07

chris7522

Erreur de compilation ( C++)

Bonjour,
    J'ai ce message d'erreur que je n'arrive pas a comprendre . Ca doit pas etre grand chose comme d'habitude , mais je vois pas .
   Merci de votre aide .

#ifndef FONCTAB_HPP_
#define FONCTAB_HPP_
#include <iostream>
#include <vector>

class Joueur
{
  public:
  Joueur();
  ~Joueur();
  void saisie(std::vector<std::string>&tab,size_t taille);
  void affiche(std::vector<std::string>&tab,size_t taille);


};
#endif /* FONCTAB_HPP_ */
#include "foncTab.hpp"

using namespace std;

void Joueur::saisie(vector<string> &tab,size_t taille)
{
	while(tab.size() < taille)
	tab.clear();
	for(size_t i(0);i<tab.size();++i){
		cout << "Entrez nom du joueur" << i <<":" << endl;
		cin >> tab[i];
	}
}
void Joueur::affiche(vector<string> &tab,size_t taille)
{
	for(size_t i(0);i< tab.size();++i){
		cout << "Le joueur" << i << "est" << tab[i]<< endl;
	}
}
#include "foncTab.hpp"
#include <iostream>
#include <vector>
using namespace std;

int main()
{
 Joueur equipe1,equipe2;

 char a;
 cout << "Voulez vous faire une partie ?" << endl;
 cout << "Tapez o (oui) ou n (non)"<< endl;
 cin >> a;
 if(a == 'o')
 {
   size_t nb(0);
   cout << "Quel est le nombre de personne dans votre equipe ?" << endl;
   cin >> nb;
   vector<string>tab;
   equipe1.saisie(tab,nb);
   cout << "Votre equipe est constitué de :" << nb << "personnes" << endl;
   cout << "Voici le nom des joueurs :" << endl;
   equipe1.affiche(tab,nb);
 }
 else
   cout << "Aurevoir,a bientot" << endl;
return 0;
}
20:48:48 **** Incremental Build of configuration Debug for project foncTab ****
make all 
Building file: ../foncTab.cpp
Invoking: GCC C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"foncTab.d" -MT"foncTab.o" -o "foncTab.o" "../foncTab.cpp"
Finished building: ../foncTab.cpp
 
Building target: foncTab
Invoking: GCC C++ Linker
g++  -o "foncTab"  ./foncTab.o ./main.o   
./main.o : Dans la fonction « main » :
/home/chris/eclipse-workspace/foncTab/Debug/../main.cpp:8 : référence indéfinie vers « Joueur::Joueur() »
/home/chris/eclipse-workspace/foncTab/Debug/../main.cpp:8 : référence indéfinie vers « Joueur::Joueur() »
/home/chris/eclipse-workspace/foncTab/Debug/../main.cpp:8 : référence indéfinie vers « Joueur::~Joueur() »
/home/chris/eclipse-workspace/foncTab/Debug/../main.cpp:8 : référence indéfinie vers « Joueur::~Joueur() »
/home/chris/eclipse-workspace/foncTab/Debug/../main.cpp:8 : référence indéfinie vers « Joueur::~Joueur() »
/home/chris/eclipse-workspace/foncTab/Debug/../main.cpp:8 : référence indéfinie vers « Joueur::~Joueur() »
collect2: error: ld returned 1 exit status
makefile:44: recipe for target 'foncTab' failed
make: *** [foncTab] Error 1
"make all" terminated with exit code 2. Build might be incomplete.

20:48:50 Build Failed. 2 errors, 0 warnings. (took 1s.289ms)

Hors ligne

#2 Le 01/04/2020, à 21:30

grigouille

Re : Erreur de compilation ( C++)

C'est clair pourtant (et en français svp) : il est où le code du constructeur et du destructeur ?


Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#3 Le 01/04/2020, à 21:32

chris7522

Re : Erreur de compilation ( C++)

aie aie aie smile
Merci de ton aide

#include "foncTab.hpp"

using namespace std;

Joueur::Joueur(){}
Joueur::~Joueur(){}
void Joueur::saisie(vector<string> &tab,size_t taille)
{
     tab.clear();
     while(tab.size() < taille){
     cout << "Entrez le nom du joueur" << endl;
     string name;
     cin >> name;
     tab.push_back(name);
    }
}
void Joueur::affiche(vector<string> &tab,size_t taille)
{
     for(size_t i(0);i< taille;++i){
     cout << "Le joueur " << i+1 << " est " << tab[i]<< endl;
     }
}

Dernière modification par chris7522 (Le 01/04/2020, à 22:20)

Hors ligne

#4 Le 03/04/2020, à 16:57

chris7522

Re : Erreur de compilation ( C++)

Une derniere question si je peux me permettre . 
Admettons que pour chaque instance " equipe1" et  "equipe2 " , j'ai 3 personnes dans chacune d'entre elle .
equipe1 :
-toto
-tata
-titi
equipe2:
-riri
-fifi
-loulou
Comment puis-je afficher " fifi" par exemple ?
J'avais pensé a :

equipe2.tab[1]

Hors ligne

#5 Le 03/04/2020, à 18:15

grigouille

Re : Erreur de compilation ( C++)

Ta class Joueur est sans état. : elle ne contient rien. Tu pourrais d'ailleur déclarer tes fonctions "saisie" et "affiche" static.


Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#6 Le 03/04/2020, à 18:22

chris7522

Re : Erreur de compilation ( C++)

Elle contient 2 déclarations de méthode non ?

Hors ligne

#7 Le 03/04/2020, à 18:34

grigouille

Re : Erreur de compilation ( C++)

Tu pourrais ajouter static à tes deux méthodes et appeler la méthode ainsi

#include <iostream>
#include <vector>
#include <string>
class Joueur
{
  public:
  static void saisie(std::vector<std::string>&tab,size_t taille);
  static void affiche(std::vector<std::string>&tab,size_t taille);
};

using namespace std;

void Joueur::saisie(vector<string> &tab,size_t taille)
{
     tab.clear();
     while(tab.size() < taille){
     cout << "Entrez le nom du joueur" << endl;
     string name;
     cin >> name;
     tab.push_back(name);
    }
}
void Joueur::affiche(vector<string> &tab,size_t taille)
{
     for(size_t i(0);i< taille;++i){
     cout << "Le joueur " << i+1 << " est " << tab[i]<< endl;
     }
}

int main()
{

 char a;
 cout << "Voulez vous faire une partie ?" << endl;
 cout << "Tapez o (oui) ou n (non)"<< endl;
 cin >> a;
 if(a == 'o')
 {
   size_t nb(0);
   cout << "Quel est le nombre de personne dans votre equipe ?" << endl;
   cin >> nb;
   vector<string>tab;
   Joueur::saisie(tab,nb);
   cout << "Votre equipe est constitué de :" << nb << "personnes" << endl;
   cout << "Voici le nom des joueurs :" << endl;
   Joueur::affiche(tab,nb);
 }
 else
   cout << "Aurevoir,a bientot" << endl;
return 0;
}

Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#8 Le 03/04/2020, à 19:00

chris7522

Re : Erreur de compilation ( C++)

Merci de ton aide .
Mais du coup , je ne peux plus travailler sur mes 2 instances .

Dernière modification par chris7522 (Le 03/04/2020, à 19:01)

Hors ligne

#9 Le 03/04/2020, à 20:51

grigouille

Re : Erreur de compilation ( C++)

Ta class Joueur n'est qu'un espace de nom. Ton code se résume à ceci :

#include <iostream>
#include <vector>
#include <string>

namespace Joueur {
void saisie(std::vector<std::string>&tab,size_t taille);
void affiche(std::vector<std::string>&tab,size_t taille);
}//Joueur

using namespace std;

namespace Joueur {
void saisie(vector<string> &tab,size_t taille)
{
     tab.clear();
     while(tab.size() < taille){
     cout << "Entrez le nom du joueur" << endl;
     string name;
     cin >> name;
     tab.push_back(name);
    }
}
void affiche(vector<string> &tab,size_t taille)
{
     for(size_t i(0);i< taille;++i){
     cout << "Le joueur " << i+1 << " est " << tab[i]<< endl;
     }
}
}//Joueur

int main()
{

 char a;
 cout << "Voulez vous faire une partie ?" << endl;
 cout << "Tapez o (oui) ou n (non)"<< endl;
 cin >> a;
 if(a == 'o')
 {
   size_t nb(0);
   cout << "Quel est le nombre de personne dans votre equipe ?" << endl;
   cin >> nb;
   vector<string>tab;
   Joueur::saisie(tab,nb);
   cout << "Votre equipe est constitué de :" << nb << "personnes" << endl;
   cout << "Voici le nom des joueurs :" << endl;
   Joueur::affiche(tab,nb);
 }
 else
   cout << "Aurevoir,a bientot" << endl;
return 0;
}

Dernière modification par grigouille (Le 04/04/2020, à 08:51)


Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#10 Le 05/04/2020, à 15:52

chris7522

Re : Erreur de compilation ( C++)

Daccord , je comprends .
Merci de ton aide

Hors ligne