2008-10-08 8 views
4

Comment faire un renvoi de référence/déclaration en C++ pour éviter les références de fichier d'en-tête circulaire? J'ai le #ifndef garde dans le fichier d'en-tête, mais la mémoire me dit que j'ai besoin de cette chose de référence vers l'avant - que j'ai déjà utilisé> < mais je ne me souviens plus comment.Référencement ou déclaration en C++

Répondre

15

Vous présélectionnez la classe sans l'inclure. Par exemple:

//#include "Foo.h" // including Foo.h causes circular reference 
class Foo; 

class Bar 
{ 
... 
}; 
+0

A noter également dans ce cas: la classe Bar ne peut pas contenir de classe Foo, mais elle peut avoir un pointeur vers une classe Foo. – KPexEA

+0

Notez également que le type de retour formel des fonctions peut être du type forward forward. – QBziZ

-2

Vous n'obtiendrez pas de références de fichiers d'en-tête circulaires si vous avez des gardes #ifndef. C'est le but.

Le référencement vers l'avant est utilisé pour éviter #include (ing) les fichiers d'en-tête pour les objets que vous utilisez uniquement par pointeur ou référence. Cependant, dans ce cas, vous ne résolvez pas un problème de référence circulaire, vous vous contentez de faire du bon design et de découpler le fichier .h des détails qu'il n'a pas besoin de connaître.

+0

Ce n'est pas exact. le référencement vers l'avant pourrait remplacer le besoin d'un #include et éliminant ainsi la nécessité d'un cercle #include. – shoosh

+2

Je suis d'accord que si vous n'aviez pas de gardes #ifndef, vous pourriez essayer de gérer (maladroitement) toutes vos dépendances d'en-têtes circulaires en utilisant des déclarations directes, cependant l'OP a dit qu'il avait des gardes en-tête. –

1

Je crois que le terme correct pour ce dont vous parlez est "déclaration avant". Le "renvoi en avant" serait un peu confus.

Questions connexes