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:

#ifndef A_H_
#define A_H_

#include "B.h"

class A {

public:
void a(B b);

};

#endif
et la classe B :

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:

In file included from B.h:11,
from B.cpp:9:
A.h:16: error: ‘B’ has not been declared
Ce que j'interprète comme ça:

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...??...