Bonjour,
malgr� mes recherches je ne suis pas certain d'avoir bien compris les raisons qui font que parfois lors d'inclusions cycliques il y a erreur de compilation.
J'ai fait quelque petits tests:
Soit la classe A :
A.h:
et la classe B :#ifndef A_H_
#define A_H_
#include "B.h"
class A {
public:
void a(B b);
};
#endif
B.h:
#ifndef B_H_
#define B_H_
#include "A.h"
class B {
public:
void b();
};
#endif
Ca ne compile donc pas avec l'erreur suivante:
Ce que j'interpr�te comme �a:In file included from B.h:11,
from B.cpp:9:
A.h:16: error: �B� has not been declared
Dans B.cpp, avec la directive d'inclusion le pr�processeur copie-colle B.h et le parse :
or B.h inclut A.h donc le pr�processeur copie-colle aussi A.h et le parse:
il rencontre le symbole "B" dans la fonction "void a(B b)", le compilo veut connaitre l'adresse m�moire de ce symbole (via la table des symboles) mais il ne peut pas car la classe B n'a pas encore �t� compil�e.
Est ce que c'est vraiment ce qu'il se passe ?
Si oui alors pourquoi apr�s:
- avoir enlev� le symbole B de ma classe A pour avoir simplement "void a()".
- et utiliser le symbole B dans ma classe B , par exemple avec une fonction "void b(B b);"
pourquoi est ce que �a compile ? ca ne devrait pas puisqu'il ne connait toujours pas l'adresse du symbole B...??...
Partager