C++ remplir un tableau d'objet

tchapos Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33758 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
mon programme compile mais a l'exécution il plante chaque fois qu'il essaie de mettre un objet dans le tableau voici mon code. C'est un petit jeu de dé... merci pour votre aide

#include <cstdlib>
#include "De.h"
#include "Joueur.h"
#include "sept.h"

using namespace std;


sept::sept(){

}

sept::sept(int i){
adr=new Joueur[nbrJoueur=i];
taille=0;
}
sept::~sept(){
delete adr;
}
sept::sept(sept & listeJoueur){
nbrJoueur=listeJoueur.nbrJoueur;
adr=new Joueur[nbrJoueur];
}
void sept::operator = (sept & septi){
sept s;
s=septi;
}

/*string * sept::getJoueur(int i){
string s =*(adr+i).getVal();
return s;

}*/
void sept::participant(Joueur &UnJoueur){
//tab[taille]=UnJoueur; ici ca BUGGGG
*(adr+taille)=UnJoueur;
cout << "jjjjjjj";
affiche();
//adr[taille]=UnJoueur;

++taille;


}
int sept::partie(){
De d;
d.lancer();
int score=d.getVal();
return score;
}

void sept::affiche(){
for(int i=0;i<taille;i++){
cout <<"00000000" <<adr[i].getVal();
}
}
*****************************MAIN*************************************
#include<iostream>
#include "sept.h"

using namespace std;
static int NBR=7;

Joueur inscrireJoueur(){
string nomJoueur;
cout << "Quel est le nom du jour ?";
cin >> nomJoueur;
Joueur unJoueur = Joueur::Joueur(nomJoueur);

return unJoueur;

}

void main()
{
int nbrJoueur,de;
string nom;

cout << "quel est le nombre de joueur ?"<< endl;
cin >> nbrJoueur;
sept s=sept::sept(nbrJoueur);

for (int i=0;i<nbrJoueur;++i) {
Joueur j=inscrireJoueur();
s.participant(j);
}

do
{

for(int i=0;i<nbrJoueur;i++){
// nom=s.getJoueur(i);
de=s.partie();
cout << nom<<" a fait comme score: " << de<< endl;
}

}
while ((de!=NBR));
}
A voir également:

7 réponses

mamiemando Messages postés 33758 Date d'inscription   Statut Modérateur Dernière intervention   7 877
 
Le truc c'est que là on a qu'une partie du code il manque "De.h", "Joueur.h", "sept.h". Quelques recommandations de programmation :

1) nommer les fichiers c++ uniquement en minuscules avec l'extension hpp (par exemple de.hpp) pour les différencier des headcers en C,

2) main est sensé retourner un int (code d'exécution, 0 si tout va bien)

3) le "using namespace std;" ne devrait être utilisé en toute rigueur que dans les fichiers sources (.cpp).pour ne pas risquer de se propager dans des fichiers qui ont besoin d'isoler le namespace std.

Pour écrire dans :
//tab[taille]=UnJoueur; ici ca BUGGGG 

... il faut que tab soit au moins de taille "taille + 1", ainsi la case tab[taille] est allouée et peut être modifiée. Malheureusement comme il manque le header on ne sait pas de quel type est tab (si c'est un std::vector tu peux utiliser la méthode resize(), si c'est un tableau il faut l'allouer (par exemple avec un new dans le constructeur et le désallouer avec delete dans le destructeur).

Bonne chance
0
tchapos
 
Tab contient des objets de types Joueur, j'ai essaye d'enlever le using namespace std dans les .h mais ca m'affichaient des erreurs...
0
tchapos Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
Voici la suite manquante
************************sept.h******************************
#ifndef __sept_INCLUS__
#define __sept_INCLUS__
#include <iostream>
#include "Joueur.h"
#include <string>

using namespace std ;

class sept {
Joueur *adr;
int nbrJoueur,taille;
//Joueur tab[10];

public:
sept();
sept(int);
~sept();
sept(sept &);
void operator = (sept &);
string getJoueur(int);
void participant(Joueur &);
int partie();
void affiche();







};
************************De.h*************************
#endif
#ifndef __DE_INCLUS__
#define __DE_INCLUS__


/*
Dans le fichier du jeu incluant des dés
#include <ctime>

dans le constructeur du jeu
srand(time(NULL));
*/

class De
{
int valeur;

public:
De();
~De();
De(De &);
void operator = (De &);
int getVal();
int lancer();
};

#endif //__DE_IN
*******************************De.cpp*******************
#include <cstdlib>
#include "De.h"

De::De()
{
lancer();
}

De::~De()
{
}

De::De(De & d)
{
valeur = d.valeur;
}

void De::operator = (De & de){
De des;
des= de;

}

int De::getVal()
{
return valeur;
}

int De::lancer()
{
return valeur = 1 + (rand() % 6);
}
**************************Joueur.h**************************************
#ifndef __Joueur_INCLUS__
#define __Joueur_INCLUS__
#include <string>

using namespace std;

class Joueur
{
string nomJoueur;

public:

Joueur();
Joueur(string);
~Joueur();
Joueur(Joueur &);
void operator =(Joueur &);
string getVal();


};
#endif
*********************Joueur.cpp************************
#include <cstdlib>
#include "Joueur.h"
using namespace std;

Joueur::Joueur(){

}
Joueur::Joueur(string joueur){
nomJoueur=joueur;
}

Joueur::~Joueur(){
}

Joueur::Joueur(Joueur & player){
nomJoueur = player.nomJoueur;
}

void Joueur::operator = (Joueur & player){
Joueur joueur;
joueur=player;

}

string Joueur::getVal(){
return nomJoueur;
}
0
tchapos Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
mais j'emplois adr comme tableau d'objet Joueur, je viens d'essayer avec une taille+1 mais ca plante toujours...

Arf je m'arrache les cheveux.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tchapos Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
j'ai change le main mais ca plante tjrs .... :(

sept * s;
int nbrJoueur,de;
string nom;

cout << "quel est le nombre de joueur ?"<< endl;
cin >> nbrJoueur;
//sept s=sept::sept(nbrJoueur);
//sept s(nbrJoueur);
s= new sept(nbrJoueur);
for (int i=0;i<nbrJoueur;++i) {
Joueur j=inscrireJoueur();
s[i].participant(j);
}

do
{
0
tchapos Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
erreur de pointage
0
mamiemando Messages postés 33758 Date d'inscription   Statut Modérateur Dernière intervention   7 877
 
Peux tu mettre une archive de ton code sur cjoint (avec un makefile pour compiler) et me donner l'adresse.
https://www.cjoint.com/

Bonne chance
0