[C++] Classes Auto-référencées ?
Résolu/Fermé
MoiCJarod
Messages postés
161
Date d'inscription
vendredi 14 novembre 2003
Statut
Membre
Dernière intervention
22 décembre 2009
-
23 nov. 2006 à 19:40
Charles - 12 oct. 2014 à 22:19
Charles - 12 oct. 2014 à 22:19
A voir également:
- [C++] Classes Auto-référencées ?
- Telecharger auto refresh - Télécharger - Divers Web & Internet
- Auto mouse click - Télécharger - Divers Utilitaires
- Logiciel auto-entrepreneur gratuit télécharger - Télécharger - Comptabilité & Facturation
- Supprimer podcast android auto - Accueil - Guide audio
- Auto backup - Télécharger - Sauvegarde
3 réponses
MoiCJarod
Messages postés
161
Date d'inscription
vendredi 14 novembre 2003
Statut
Membre
Dernière intervention
22 décembre 2009
111
23 nov. 2006 à 21:33
23 nov. 2006 à 21:33
Rebonsoir,
Merci pour ton aide, mais en fait, c'est pas vraiment des structures que j'utilise, mais des classes ...
Mais bon, c'est pas grace, entre temps, j'ai trouvé la solution : il faut en fait une pré-déclaration (je ne sais pas si cela s'appelle ainsi, mais bon ... je lui donne ce nom). En fait, au début de chaque classe il faut juste indiquer au compilateur qu'il existe une classe de l'autre nom :
Dans classe1.h :
/**************************/
#ifndef CLASSE1_H
#define CLASSE1_H
#include "classe2.h"
class Classe2; // (1)
class Classe1
{
public:
Classe2 * OClasse2;
};
#endif
/**************************/
et dans Classe2.h :
/**************************/
#ifndef CLASSE2_H
#define CLASSE2_H
#include "classe1.h"
class Classe1; // (2)
class Classe2
{
public:
Classe1 * OClasse1;
};
#endif
/**************************/
Sans les lignes (1) et (2), ça ne fonctionne pas et avec la compilation ne mets plus d'erreur et l'exécution fait ce que je veux aussi :-)
Merci pour ton aide, mais en fait, c'est pas vraiment des structures que j'utilise, mais des classes ...
Mais bon, c'est pas grace, entre temps, j'ai trouvé la solution : il faut en fait une pré-déclaration (je ne sais pas si cela s'appelle ainsi, mais bon ... je lui donne ce nom). En fait, au début de chaque classe il faut juste indiquer au compilateur qu'il existe une classe de l'autre nom :
Dans classe1.h :
/**************************/
#ifndef CLASSE1_H
#define CLASSE1_H
#include "classe2.h"
class Classe2; // (1)
class Classe1
{
public:
Classe2 * OClasse2;
};
#endif
/**************************/
et dans Classe2.h :
/**************************/
#ifndef CLASSE2_H
#define CLASSE2_H
#include "classe1.h"
class Classe1; // (2)
class Classe2
{
public:
Classe1 * OClasse1;
};
#endif
/**************************/
Sans les lignes (1) et (2), ça ne fonctionne pas et avec la compilation ne mets plus d'erreur et l'exécution fait ce que je veux aussi :-)
mamiemando
Messages postés
33426
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
13 décembre 2024
7 809
23 nov. 2006 à 20:25
23 nov. 2006 à 20:25
typedef struct plop * plop_t; typedef struct tapir{ plop_t p; } * tapir_t; struct plop{ tapir_t t; };
ou truc dans le genre... non ?
Bonne chance
mamiemando
Messages postés
33426
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
13 décembre 2024
7 809
24 nov. 2006 à 01:40
24 nov. 2006 à 01:40
Heu je signale qu'une classe et une structure c'est syntaxiquement la même chose à ceci près que dans une structure tout est publique.
Le but de mon typedef premier typedef est le même que celui de ta ligne (1) et aurait aussi bien marché avec des classes. Mais ta solution est très bien aussi t'inquiète... à ceci près que les deux headers s'incluent mutuellement et c'est pour ça que tu es obligé d'avoir d'une part (1) et (2).
Si tu avais tout mis dans le même fichier (ce qui aurait été logique vu que les deux classes dépendent l'une de l'autre et sont de toute façon indissociable), tu aurais pu te contenter par exemple juste de (1).
Bref... :) C'est cool tu t'en es sorti, bonne chance pour la suite.
Le but de mon typedef premier typedef est le même que celui de ta ligne (1) et aurait aussi bien marché avec des classes. Mais ta solution est très bien aussi t'inquiète... à ceci près que les deux headers s'incluent mutuellement et c'est pour ça que tu es obligé d'avoir d'une part (1) et (2).
Si tu avais tout mis dans le même fichier (ce qui aurait été logique vu que les deux classes dépendent l'une de l'autre et sont de toute façon indissociable), tu aurais pu te contenter par exemple juste de (1).
Bref... :) C'est cool tu t'en es sorti, bonne chance pour la suite.
30 mai 2007 à 20:18
12 oct. 2014 à 22:19