Rechercher : dans
Par :

C++ remplir un tableau d'objet

Dernière réponse le 8 déc 2008 à 17:00:24 tchapos, le 7 déc 2008 à 22:04:23 
 Signaler ce message aux modérateurs

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));
}

Configuration: Windows Vista
Firefox 3.0.4

Meilleures réponses pour « c++ remplir un tableau d'objet » dans :
Langage C - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C, une chaîne...
Langage C - Les tableaux VoirType de données complexes Les variables, telles que nous les avons vues, ne permettent de stocker qu'une seule donnée à la fois. Or, pour de nombreuses données, comme cela est souvent le cas, des variables distinctes seraient beaucoup trop lourdes...
Les objets en langage C++ VoirLa création d'objets En C++, il existe deux façons de créer des objets, c'est-à-dire d'instancier une classe : de façon statique de façon dynamique La création statique La création statique d'objets consiste à créer un objet en lui affectant un...

1

mamiemando, le 7 déc 2008 à 23:02:41

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

Répondre à mamiemando

2

tchapos, le 8 déc 2008 à 05:51:59

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...

Répondre à tchapos

3

tchapos, le 8 déc 2008 à 05:55:26

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;
}

Répondre à tchapos

4

tchapos, le 8 déc 2008 à 05:59:08

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.

Répondre à tchapos

5

tchapos, le 8 déc 2008 à 07:28:02

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
{

Répondre à tchapos

6

tchapos, le 8 déc 2008 à 09:06:19

Erreur de pointage

Répondre à tchapos

7

 mamiemando, le 8 déc 2008 à 17:00:24

Peux tu mettre une archive de ton code sur cjoint (avec un makefile pour compiler) et me donner l'adresse.
http://cjoint.com/

Bonne chance

Répondre à mamiemando
Collection CommentÇaMarche.net