Boucle infinie en C
Fermé
darkman
-
22 avril 2002 à 13:44
chmanu Messages postés 166 Date d'inscription mardi 15 mai 2001 Statut Membre Dernière intervention 3 septembre 2012 - 24 avril 2002 à 13:58
chmanu Messages postés 166 Date d'inscription mardi 15 mai 2001 Statut Membre Dernière intervention 3 septembre 2012 - 24 avril 2002 à 13:58
3 réponses
Peguinette
Messages postés
176
Date d'inscription
vendredi 15 juin 2001
Statut
Membre
Dernière intervention
17 juillet 2003
30
22 avril 2002 à 14:39
22 avril 2002 à 14:39
D'abord tu fais quoi du c ou du c++ ?
si tu fais du c++,
il ne faut pas que lorsque tu instancie un jeu, tu instencie aussi un joueur, mais plutot que tu lui en affecte un.
ex :
tu instancie un objet jeu :
new Jeu();
dans ce constructeur, tu vas instancier aussi un joueur en faisant :
new joueur(this); //tu lui passes en argument ton objet jeu.
au niveau de tes fichiers includes, il faut que tu utilises le precompliateur (les lignes de codes qui commencent par #)
en les utilisant correctement, tu peux tester si tu as déja inclus les fichiers ou pas. pour ne pas les inclures indefiniment.
voila, bon courage.
Peguinette...
"Petit à petit on devient moins petit."
si tu fais du c++,
il ne faut pas que lorsque tu instancie un jeu, tu instencie aussi un joueur, mais plutot que tu lui en affecte un.
ex :
tu instancie un objet jeu :
new Jeu();
dans ce constructeur, tu vas instancier aussi un joueur en faisant :
new joueur(this); //tu lui passes en argument ton objet jeu.
au niveau de tes fichiers includes, il faut que tu utilises le precompliateur (les lignes de codes qui commencent par #)
en les utilisant correctement, tu peux tester si tu as déja inclus les fichiers ou pas. pour ne pas les inclures indefiniment.
voila, bon courage.
Peguinette...
"Petit à petit on devient moins petit."
Peguinette
Messages postés
176
Date d'inscription
vendredi 15 juin 2001
Statut
Membre
Dernière intervention
17 juillet 2003
30
22 avril 2002 à 14:42
22 avril 2002 à 14:42
D'abord tu fais quoi du c ou du c++ ?
si tu fais du c++,
il ne faut pas que lorsque tu instancie un jeu, tu instencie aussi un joueur, mais plutot que tu lui en affecte un.
ex :
tu instancie un objet jeu :
new Jeu();
dans ce constructeur, tu vas instancier aussi un joueur en faisant :
new joueur(this); //tu lui passes en argument ton objet jeu.
au niveau de tes fichiers includes, il faut que tu utilises le precompliateur (les lignes de codes qui commencent par #)
en les utilisant correctement, tu peux tester si tu as déja inclus les fichiers ou pas. pour ne pas les inclures indefiniment.
voila, bon courage.
Peguinette...
"Petit à petit on devient moins petit."
si tu fais du c++,
il ne faut pas que lorsque tu instancie un jeu, tu instencie aussi un joueur, mais plutot que tu lui en affecte un.
ex :
tu instancie un objet jeu :
new Jeu();
dans ce constructeur, tu vas instancier aussi un joueur en faisant :
new joueur(this); //tu lui passes en argument ton objet jeu.
au niveau de tes fichiers includes, il faut que tu utilises le precompliateur (les lignes de codes qui commencent par #)
en les utilisant correctement, tu peux tester si tu as déja inclus les fichiers ou pas. pour ne pas les inclures indefiniment.
voila, bon courage.
Peguinette...
"Petit à petit on devient moins petit."
Tout d'abord Merci de t'etre penché sur mon probleme,
en fait j'ai déja essayé de faire des #ifndef,#define,#endif
mais ca a abouti a rien, ca me rajoute des erreurs a la compilation...
pour le premier truc que tu m'as dit, j'ai déja fait ça, je crée dans le constructeur de la classe Jeu, un objet Joueur en lui passant en parametre le Jeu. mais dans ce cas là il faut quand meme inclure "Jeu.h" dans "Joueur.h", et là ca foire...
jvais continuer a chercher une solution avec les #...
merci encore, a++
Darkman
en fait j'ai déja essayé de faire des #ifndef,#define,#endif
mais ca a abouti a rien, ca me rajoute des erreurs a la compilation...
pour le premier truc que tu m'as dit, j'ai déja fait ça, je crée dans le constructeur de la classe Jeu, un objet Joueur en lui passant en parametre le Jeu. mais dans ce cas là il faut quand meme inclure "Jeu.h" dans "Joueur.h", et là ca foire...
jvais continuer a chercher une solution avec les #...
merci encore, a++
Darkman
tafiscobar
Messages postés
1277
Date d'inscription
jeudi 7 décembre 2000
Statut
Contributeur
Dernière intervention
26 février 2009
177
24 avril 2002 à 13:28
24 avril 2002 à 13:28
bon voila darkman, ce que tu v faire est impossible car a la compilation voila ce que va faire le compilateur :
ds jeu.h, il va voir #include"joueur.h" et il va voir ds "joueur.h" et la encore, il voit #include"jeu.h" et ainsi de suite, ce sera des appels sans fin entre les 2 fichiers, d'ou l'erreur, en objet impossible cela.
Voila ce q tu vas faire :tu crees tes 2 classes sans y mettre les agregations, i evoila :
class CJeu
{//donnes qui st propres a jeu et methodes. sans instance de CJoueur
};
class CJoueur
{//donnes et methodes propres sans instance de CJeu
}
//methode 1 :
Ensuite,tu crees un fichier assoc.h et tu fais :
class CAssoc
{
CJeu *unJeu;//liste de jeux
CJoueur *unJoueur;//lioste de joueurs
public:
void ajouter(Cjoueur *joueur, int pos);
void supprimer(Cjeu *jeu,int pos);
//..., en fait ces 2 methodes st juste des exemples, tu fais ce q tu v
//methode2
tu crees un fichier JoueurSpe.h
class CJoueurSpe : public Cjoueur
{CJeu *unJeu;//une liste de jeu
//etc....
};
puis un fichier JeuSpe.h
class CJeuSpe : public Cjeu
{CJoueur * unJoueur;
//etc..
};
voila, notre prof d'objet a prefere la premiere methode mais moi je prefere la seconde(que j'ai fait moi-meme d'ailleurs).Mais attention, donc pour la methode 2, tes 2 classes Cjeu et CJoueur, tu ne les instancie pas ds le main car t'en a pas besoin, puisque les classes spe st celles dont t'as besoin.
Sinon, si t'es pas satisfait, reponds a dje-dje, peut etre qu'il a une autre solution,effectivement.
tafiscobar
ds jeu.h, il va voir #include"joueur.h" et il va voir ds "joueur.h" et la encore, il voit #include"jeu.h" et ainsi de suite, ce sera des appels sans fin entre les 2 fichiers, d'ou l'erreur, en objet impossible cela.
Voila ce q tu vas faire :tu crees tes 2 classes sans y mettre les agregations, i evoila :
class CJeu
{//donnes qui st propres a jeu et methodes. sans instance de CJoueur
};
class CJoueur
{//donnes et methodes propres sans instance de CJeu
}
//methode 1 :
Ensuite,tu crees un fichier assoc.h et tu fais :
class CAssoc
{
CJeu *unJeu;//liste de jeux
CJoueur *unJoueur;//lioste de joueurs
public:
void ajouter(Cjoueur *joueur, int pos);
void supprimer(Cjeu *jeu,int pos);
//..., en fait ces 2 methodes st juste des exemples, tu fais ce q tu v
//methode2
tu crees un fichier JoueurSpe.h
class CJoueurSpe : public Cjoueur
{CJeu *unJeu;//une liste de jeu
//etc....
};
puis un fichier JeuSpe.h
class CJeuSpe : public Cjeu
{CJoueur * unJoueur;
//etc..
};
voila, notre prof d'objet a prefere la premiere methode mais moi je prefere la seconde(que j'ai fait moi-meme d'ailleurs).Mais attention, donc pour la methode 2, tes 2 classes Cjeu et CJoueur, tu ne les instancie pas ds le main car t'en a pas besoin, puisque les classes spe st celles dont t'as besoin.
Sinon, si t'es pas satisfait, reponds a dje-dje, peut etre qu'il a une autre solution,effectivement.
tafiscobar
chmanu
Messages postés
166
Date d'inscription
mardi 15 mai 2001
Statut
Membre
Dernière intervention
3 septembre 2012
28
24 avril 2002 à 13:58
24 avril 2002 à 13:58
salut
j ai eu ce meme pb il y a qq mois et j ai eu la reponse dans ce forum,
c etait un peu plus simple : il suffisait de definir dans chacun des fichiers le type de lautre. je m explique (et ca reprend ce que tu as fais unpeu) :
ds jeu.h : tu inseres typedef Joueur Joueur;
et ds joueur.h : typedef Jeu Jeu;
et ca marche
Chmanu
j ai eu ce meme pb il y a qq mois et j ai eu la reponse dans ce forum,
c etait un peu plus simple : il suffisait de definir dans chacun des fichiers le type de lautre. je m explique (et ca reprend ce que tu as fais unpeu) :
ds jeu.h : tu inseres typedef Joueur Joueur;
et ds joueur.h : typedef Jeu Jeu;
et ca marche
Chmanu