Je crée un système d'entités basé sur des composants pour un moteur de jeu.C++: problème de circulaire conceptuel
I avoir une classe d'entité qui doit inclure l'en-tête de classe de base composant afin de définir la matrice de composants private Component* components[ 123 ]
Cependant, dans la classe de base composant I doivent définir un private Entity* ownerEntity
, beacuse il est crucial qu'un composant sait à qui il appartient!
Il en résulte Entity.h besoin Component.h et vice-versa -> Référence circulaire
Comment puis-je résoudre ce problème?
* Vraiment? * Génial! – Ricc
En fait, dans les deux classes, vous n'avez besoin que de pointeurs, vous pouvez (devez!) Déclarer les dépendants au lieu de les inclure dans les deux en-têtes. Aucun des en-têtes dans ce cas ne devrait dépendre de l'autre; Cela fera un temps de compilation super-rapide. Rincez et répétez pour toutes les autres références, les pointeurs et leurs homologues const pour chaque classe. ** Aussi **: lisez [ce que Herb Sutter a à dire à propos des dépendances au moment de la compilation] (http://www.gotw.ca/gotw/007.htm). – wilhelmtell
Vous pouvez pousser l'idée trop loin - j'ai une fois "habilement" retransmis automatiquement auto_ptr afin que je puisse avoir une classe de très bas niveau inclure une méthode toString() rarement utilisée retournant auto_ptr . Cela signifie que vous avez besoin de '#include ' partout où vous l'appelez *, et les erreurs que vous obtenez de gcc si vous ne le faites pas sont à peine intuitives. –