2010-03-23 5 views
2

Cela fait longtemps que je n'ai pas fait de C++ et je rencontre des problèmes avec les classes se référant mutuellement.Comment puis-je déclarer des classes qui se réfèrent mutuellement?

En ce moment, j'ai quelque chose comme:

ah

class a 
{ 
    public: 
    a(); 
    bool skeletonfunc(b temp); 
}; 

bh

class b 
{ 
    public: 
    b(); 
    bool skeletonfunc(a temp); 
}; 

Comme chacun a besoin d'une référence à l'autre, je l'ai trouvé que je ne peux pas faire un #include de l'autre en haut ou je finis dans une boucle étrange avec les inclus.

Alors, comment puis-je faire en sorte que a puisse utiliser b et vice versa sans faire de #include cyclique?

merci!

Répondre

8

Vous devez utiliser Forward Declaration:

ah

class b; 
class a 
{ 
    public: 
    a(); 
    bool skeletonfunc(b temp); 
} 

Cependant, dans de nombreuses situations, cela peut vous forcer à travailler avec des références ou des pointeurs dans vos appels de méthodes ou variables membres, puisque vous pouvez » t avoir les types complets dans les deux en-têtes de classe. Si la taille du type doit être connue, vous devez utiliser une référence ou un pointeur. Vous pouvez cependant utiliser le type si seulement une déclaration de méthode est requise.

+1

Assurez-vous de prendre note que vous aurez besoin de se référer à tous les types énoncés déclarés à l'aide des pointeurs ou des références comme indiqué dans cet exemple (b & temp). –

+6

Non, la déclaration d'origine (avec sémantique pass-by-value) serait compilée. Vous aurez besoin de la déclaration de classe complète avant la définition de la méthode, mais pas de déclarer la signature de la méthode: 'class a; vide f (a); Classe A {}; void f (ax) {... 'voir http://stackoverflow.com/questions/389957/forward-declaration-of-a-base-class/390124#390124 –

+0

@David: J'ai édité pour être plus explicite à ce sujet . –

Questions connexes