Problème de visibilité

Signaler
Messages postés
147
Date d'inscription
lundi 16 août 2004
Statut
Membre
Dernière intervention
14 novembre 2009
-
Messages postés
147
Date d'inscription
lundi 16 août 2004
Statut
Membre
Dernière intervention
14 novembre 2009
-
Salut,
Dans mon projet, je voudrais bien arriver à compiler quelque chose que l'on pourrait schématiser par le code suivant :

#include <stdio.h>
#include <string.h>

class c1 {
   char s1[10];
   public:
      void f1(c2* p) {p->g2();};
      void g1() {printf("%s\n",s1);};
      c1(char* s) {strcpy(s1,s);};
};

class c2 {
   char s2[10];
   public:
      void f2(c1* p) {p->g1();};
      void g2() {printf("%s\n",s2);};
      c2(char* s) {strcpy(s2,s);};
};

int main(int argc,char** argv)
{
   c1 truc("truc");
   c2 bidule("bidule");

   truc.f1(&bidule);
   bidule.f2(&truc);

   return 0;
}


Ce code est refusé par le compilateur car dans la classe c1 on fait référence à la classe c2 laquelle n'est pas encore déclarée.
Si on déclare la classe c2 avant la classe c1, c'est alors au niveau de c2 que çà coince, vu que l'on y fait référence à la classe c1.
Merci pour votre aide.

3 réponses

Messages postés
1466
Date d'inscription
mardi 20 février 2007
Statut
Membre
Dernière intervention
7 février 2011
1
Salut,
Si ça peut t'aider... http://www.cppfrance.com/forum/sujet-INCLUDE-CIRCULAIRES_105831.aspx

En fait, j'avais un autre lien, qui résolvait entièrement le problème, mais je ne le trouve plus.


Cordialement, uaip.
Messages postés
180
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
16 août 2012
2
Salut,

une solution consiste à prédéclarer la classe c2 avant la classe c1 ; mais la déclaration de la classe c1 ne peut plus faire appel à des membres de la classe c2. Donc, il faut définir la méthode c1::f1 après la déclaration de la classe c2.
Voici ton code modifié pour qu'il compile :

#include <stdio.h>
#include <string.h>

class c2 ;

class c1 {
   char s1[10];
   public:
      void f1(c2* p) ;//{p->g2();};
      void g1() {printf("%s\n",s1);};
      c1(char* s) {strcpy(s1,s);};
};

class c2 {
   char s2[10];
   public:
      void f2(c1* p) {p->g1();};
      void g2() {printf("%s\n",s2);};
      c2(char* s) {strcpy(s2,s);};
};

void c1::f1(c2* p) {p->g2();};

int main(int argc,char** argv)
{
   c1 truc("truc");
   c2 bidule("bidule");

   truc.f1(&bidule);
   bidule.f2(&truc);

   return 0;
}


Cordialement,
Lucky92.
Messages postés
147
Date d'inscription
lundi 16 août 2004
Statut
Membre
Dernière intervention
14 novembre 2009

Merci pour ce débloquage express, on peut dire que çà n'a pas traîné!
Je réalise au passage que l'expression "communauté des développeurs" n'est pas usurpée.
Et encore mille fois merci.