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
Vous présélectionnez la classe sans l'inclure. Par exemple:
//#include "Foo.h" // including Foo.h causes circular reference
class Foo;
class Bar
{
...
};
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.
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
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. –
Je crois que le terme correct pour ce dont vous parlez est "déclaration avant". Le "renvoi en avant" serait un peu confus.
- 1. Que fait une déclaration "CALLBACK" en C?
- 2. déclaration forward ou external insatisfaite
- 3. Problème de déclaration WNDPROC, conversion de C en C++
- 4. objectif-c si déclaration
- 5. Déclaration de verrouillage C#
- 6. Déclaration de classe C++
- 7. référencement System.Windows.Automation
- 8. double $ déclaration en php
- 9. à l'aide de la déclaration Path.Combine en C#
- 10. C++ « en utilisant » déclaration dans Visual Studio 2008
- 11. fichier virtuel? en c/C++ ou C#
- 12. écrire des pages compatibles avec le référencement public ou privé
- 13. Déclaration Antlr @header pour la génération C++
- 14. Référencement d'éléments dans une vue en grille
- 15. classes C++ emboîtés erreur de déclaration avant
- 16. Énoncé de déclaration avancée dans Objective-C
- 17. Déclaration de tableau C et affectation?
- 18. Déclaration de déclarations de mémoire dynamique C++
- 19. Math Question en C ou Objectif C
- 20. Auto-référencement hiérarchique ADO Entité
- 21. C++ question de déclaration de méthode
- 22. Référencement projet web de ironpython
- 23. Pour "ceci" ou non pour "ceci" en C#?
- 24. Référencement d'un autre projet
- 25. Problème Référencement de l'application .dll to C# windows
- 26. Référencement Méthodes AppDelegate - iphone
- 27. Bibliothèque Eye-Tracking en C#, C/C++ ou Objective-C
- 28. Erreur de référencement de l'AudioToolbox dans l'objectif C
- 29. Bibliothèque RTSP en Python ou en C/C++?
- 30. Fonctions immuables en cache ou précalculées en C#/C++
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
Notez également que le type de retour formel des fonctions peut être du type forward forward. – QBziZ