C++ : suis-je aveugle ?

Fermé
martom - 2 janv. 2010 à 12:29
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 - 3 janv. 2010 à 20:49
Bonjour,

Je cherche l'erreur depuis un bout de temps maintenant.. sans succès..

Mon problème est qu'on dirait que mon tableau dynamique TD (voir code si-dessous) n'accepte pas qu'on lui donne un NOM ! Or il est déclaré comme un tableau de 'Etudiant'. et Devinez ce que contient Etudiant ?
Un nom, un sexe et un tableau de notes.

Ca marche très bien pour le sexe et le tableau de notes, mais impossible pour le nom.

Il veux bien compiler, mais quand il arrive a cette ligne là dans l'exécution, ca plante...

J'ai fais un test : je demande d'afficher it->get_nom() pour etre sur qu'il prend la bonne valeur, et en effet, il m'affiche bien le nom de l'etudiant (hérité de personne).

Voila mon code, vous allez comprendre tout de suite :

mon problème est en commentaire, il ne concerne que 3 lignes du code, mais je vous ai tout mis, comme ca je suis sur qu'il ne vous manque rien :) (il y a des tirets a cotes de ces 3 lignes, ca vous sautera au yeux)

Merci d'avance

CODE :
    

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <list>
using namespace std;

class personne{

	string nom;
public :
	void saisie();
	void aff();	
	string get_nom();
};
class etudiant:public personne{

	int notes[2];
	char sexe;
public : 
	void saisie();
	void aff();
	char get_sexe();
	int get_notes(int i);
};

char etudiant::get_sexe(){	return sexe;}

int etudiant::get_notes(int i){ return(notes[i]);}

string personne::get_nom(){return(nom);}


struct Etudiant{

	string nom;
	char sexe;
	int notes[2];
};


void transfert(list<etudiant> pr,vector<etudiant> de){

	int dim=0, i=0;
	list<etudiant>::iterator it;
	vector<etudiant>::iterator itv;
	Etudiant *TD = new Etudiant[dim];
	
	for(it=pr.begin(); it!=pr.end(); it++){

		if(it->get_sexe()=='F'){

			dim++;
			cout<<it->get_nom();
			TD[i].notes[0]=it->get_notes(0);
			TD[i].notes[1]=it->get_notes(1);
//TD[i].nom=it->personne::get_nom();-------------ici...-----------------
			TD[i].sexe=it->get_sexe();
			i++;
		}
	}
	for(itv=de.begin(); itv!=de.end(); itv++){

		if(itv->get_sexe()=='F'){

			dim++;
//TD[i].nom=itv->get_nom();---------------------------...et la...----------
			TD[i].notes[0]=itv->get_notes(0);
			TD[i].notes[1]=itv->get_notes(1);
			TD[i].sexe=itv->get_sexe();
			i++;
		}
	}
	if(dim<=0){

		cout<<"\nDesole, il n'y a pas de fille dans les premieres et/ou deuxiemes";
		return;
	}
	cout<<"\n\nLe tableau dynamique : "<<endl<<endl;
	for(int i=0; i<dim; i++){

//cout<<"\n\nNom : "<<TD[i].nom;-----------------------------------------et la.--
		cout<<"\nNote 1 : "<<TD[i].notes[0];
		cout<<"\nNote 2 : "<<TD[i].notes[1];
		cout<<"\nSexe : "<<TD[i].sexe;
	}
	delete[] TD;

}


void main(void){........}

3 réponses

Petit erreur dans mon premier message :

La première ligne ou il y a une erreur, ce n'est pas it->personne::get_nom(); mais UNIQUEMENT it->get_nom().
0
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
2 janv. 2010 à 20:41
Il me semble avoir déjà vu un code similaire quelque part... Alors ce qui me gène:
int dim = 0, i = 0;
Etudiant* TD = new Etudiant[dim];
TD[i].notes[0] = it->get_notes(0);

Vu l'erreur ? Et je n'ai même pas parlé du 'i++'.
Bonne réflexion.
0
Je ne vois pas le problème...

J'incrémente mon tableau dynamique (TD) avant d'entrer des données à l'intérieur.

Ensuite je l'ai dis, mettre notes dans mon TD il n'y a pas de problème, pour sexe nom plus.

Mais quand je veux rentrer le nom, ca plante.. WHY ??
0
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
3 janv. 2010 à 20:49
Ah bon ;-)
i = 0 et TD[i].notes[0] = it->get_notes(0);
soit:
TD[0].notes[0] = it->get_notes(0);
et il faudrait au moins que TD[0] existât !
Bonne réflexion.
0