[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
Bonjour,

J'essaie de programmer un C++ deux classes :

une classe Classe1 dans laquelle j'ai un pointeur vers une classe Classe2
et
une classe Classe2 dans laquelle j'ai un pointeur vers une classe Classe1

... et je ne sais pas comment faire pour compiler ... à chaque fois mon compilateur (DevC++) me dit quelque chose comme ça :

ISO C++ forbids declaration of `Classe1' with no type

Pourtant j'ai bien mis les #include de classe1 dans classe2 et inversement ...

Comment faire pour avoir deux classes qui se référencent mutuellement ?

Merci
A voir également:

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
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 :-)
2
Merci pour cette information, tu as régler mon problème :)
0
Merci apres une heure de recherche
0
mamiemando Messages postés 33333 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 31 octobre 2024 7 800
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
0
mamiemando Messages postés 33333 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 31 octobre 2024 7 800
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.
0