gosu14
Messages postés13Date d'inscriptionmercredi 10 octobre 2007StatutMembreDernière intervention12 octobre 2008
-
10 oct. 2007 à 02:22
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 2008
-
12 oct. 2007 à 19:28
Bonjour,
Je suis un petit nouveau et j'ai déja un problème en cpp ;) ! Je suis à la recherche d'une bonne âme pour m'aider !
voici mon pb :
J'ai deux class dans mon prog : Student et Course, et chacune d'elle ont en private un tableau d'objet de l'autre class.
(cad : Student cont un tableau de course et Course contient un tableau de student !).
Donc vous voyez venir le problême à grande enjambée : STACK OVERFLOW , boucle infini dès que je crée un objet !
Mais voilà, mes class sont obligées de contenir des tableaux de l'autre class. Alors SVP comment contourner le pb ?
The_Guardian
Messages postés317Date d'inscriptionvendredi 25 mai 2007StatutMembreDernière intervention19 octobre 20071 10 oct. 2007 à 08:55
Bonjour,
Oui c'est tout à fait possible d'avoir une définition récursive de tes classes, tu peux dire que Student contient des Courses
et que Courses contient des Students ça donnerait quelque chose du genre:
class Student {
private:
Courses courses[10];
}
class Courses {
private:
Student students[40];
}
maintenant, ton stack overflow vient peut-être d'une mauvaise utilisation de tes tableaux et si tu collais un bout de code on pourrait voir pour t'aider plus :p
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 10 oct. 2007 à 13:17
Une autre facon de le faire, c'est d'utiliser des vecteurs:
class Student {
private:
std::vector<Courses> courses;
}
class Courses {
private:
std::vector<Student> students;
}
Mais, la seule solution bien adaptée, ce sont les pointeurs puisque du coup, il n'y a qu'un objet Student par élève, et non une copie de l'objet Student dans chaque Cours.
Vous n’avez pas trouvé la réponse que vous recherchez ?
luhtor
Messages postés2023Date d'inscriptionmardi 24 septembre 2002StatutMembreDernière intervention28 juillet 20086 10 oct. 2007 à 14:29
Que Java le permette, ca me parait douteux, je vois pas comment il peut s'en sortir.
Bien sur qu'on peut faire des classes récursives en C++, mais ce n'est pas des objets, mais des pointeurs qu'il faut utiliser. Ca n'a rien à voir... c'est pas juste une petite étoile à côté du type.
Pour les références "&" c'est inutilisable pour un membre de classe sauf cas très (très !) particulier.
gosu14
Messages postés13Date d'inscriptionmercredi 10 octobre 2007StatutMembreDernière intervention12 octobre 20081 11 oct. 2007 à 19:20
Merci pour vos réponses et désolé pour la mienne tardive (je suis au Canada, donc forcément légerement en décalage ;) )
Bon en fait mon problème n'a pas de solution, la boucle infinie est innévitable, la seule solution possible et d'utiliser des listes à la place des tableaux !! Même avec les vectors cela ne fonctionne pas !
gamemonde
Messages postés336Date d'inscriptionsamedi 9 août 2003StatutMembreDernière intervention 9 juillet 20112 12 oct. 2007 à 00:34
class Student {
public:
void SetNbCours(int iNbCours);
const Cours & GetCours(int iCours);
Student();
virtual ~Student();
private:
Courses *m_pcourses;
int m_iNbCours;
};
class Cours {
public:
void SetNbStudents(int iNbStudents);
const Students& GetStudents(int iStudents);
Cours ();
virtual ~Cours ();
private:
Student *students;
int m_iNbStudents;
};
dans tes constructeurs tu appellles SetNb...(0);
dans SetNb... tu verifies si le pointeur a deja ete initialiser si oui tu le supprime sinon tu le creer avec le nombre en parametre
et dans get.... tu peux renvoyer un object de ton pointeur
a ton destructeur tu supprimes le tableau
gosu14
Messages postés13Date d'inscriptionmercredi 10 octobre 2007StatutMembreDernière intervention12 octobre 20081 12 oct. 2007 à 00:41
Euh, jai pas bien tout compris :
Tu initialise tout les tableaux comme moi , sauf que dans le constructeurs tu appel ta fonction setnb() mais le truck c'est que tu passe un nb d'élève dans cette fonction donc cela revient à le crée directement comme moi : studentlist=new Student[10];
(pour 10 éleves), après je comprend pas du tout ton appel de destructeur .
gosu14
Messages postés13Date d'inscriptionmercredi 10 octobre 2007StatutMembreDernière intervention12 octobre 20081 12 oct. 2007 à 00:41
Euh, jai pas bien tout compris :
Tu initialise tout les tableaux comme moi , sauf que dans le constructeurs tu appel ta fonction setnb() mais le truck c'est que tu passe un nb d'élève dans cette fonction donc cela revient à le crée directement comme moi : studentlist=new Student[10];
(pour 10 éleves), après je comprend pas du tout ton appel de destructeur .
gosu14
Messages postés13Date d'inscriptionmercredi 10 octobre 2007StatutMembreDernière intervention12 octobre 20081 12 oct. 2007 à 00:51
Ah ok je vois mieux !
mais quand je vais appeler oStudent.SetNbCours(10); dans le main cela mettra 10 cours à mes student, et les tableaux de student dans les 10 cours seront quand à eux initialiser à 0 pour le moment, donc pas de boucles infinies !
ais-je bien compris ?