C++, les deux classes avec des besoins mutuels

J'ai converti un scientifique de la plate-forme de simulation à partir de Java en C++. J'ai essayé de garder le design, autant que possible, la même que la précédente, la mise en œuvre. En java, en raison de la liaison tardive, dépendances circulaires sont résolus au moment de l'exécution. Cependant, les dépendances circulaires ont créé un sacré bordel en C++.

  1. Est-il un outil automatisé qui analyse et répertorie la circulaire comprend et références? (Visual Studio 2010, seules les questions une énorme liste de bêtises erreurs).
  2. J'ai essayé d'utiliser les références vers l'avant dans la mesure du possible. Cependant dans certaines occasions, les deux classes ont besoin de fonctionnalités de l'autre classe (c'est à dire appel à des méthodes qui rend impossible l'utilisation de l'avant référence). Ces besoins existent dans la Logique et si j'ai changer radicalement la conception, ils ne seront plus représenter le monde réel des interactions.

    Comment pourrions-nous mettre en œuvre des deux classes qui ont besoin les uns des autres méthodes et l'état? Est-il possible de les mettre en œuvre en C++?

Exemples:

  • Exemple 1: j'ai une classe appelée "Monde", qui crée des Objets de type "Agent". L'Agent doit appeler du Monde de méthodes pour obtenir des informations de son environnement. Monde a aussi besoin de parcourir des Agents et de l'exécution de leur "run" de la méthode et obtenir leur statut (mises à jour de statut peuvent faire éventuellement l'inverse de résoudre cette section du problème, mais pas la méthode run).
  • Exemple 2: les Agents de créer une collection de leurs "Intentions". Chaque Agent doit itérer sur ses intentions et exécution/mise à jour/lire intention d'état. Intentions aussi besoin d'obtenir des informations sur l'environnement par l'intermédiaire de l'Agent (si elle est faite directement par le biais de "Monde", il va créer des cercles encore une fois) et aussi des informations de l'Agent lui-même.

Diagramme ci-dessous montre un sous-ensemble de classes, et certaines de leurs méthodes et de propriétés:

C++, les deux classes avec des besoins mutuels

Si vous avez des problèmes avec des erreurs, vous pouvez toujours poster une question contenant ces erreurs (verbatim) et quelqu'un sera probablement en mesure de vous aider avec elle. Aussi, ces erreurs peuvent être aucun sens pour vous, mais pas pour quelqu'un d'autre. Il est également très difficile de répondre à des questions sans voir un peu de code, et pour cela, je vous recommande la lecture de sscce.org.
Joachim, Ils sont le type d'erreurs qui sont générés dans la circulaire de la dépendance des cas. Les Classes ne peuvent pas être identifiés. code 1>e:\programming\cprojt\actiondb11\actiondb\base\world.h(35): error C2143: erreur de syntaxe : manquant ',' avant '*' 1>e:\programming\cprojt\actiondb11\actiondb\base\world.h(36): error C2061: erreur de syntaxe : identificateur 'Agent' 1>e:\programming\cprojt\actiondb11\actiondb\base\world.h(50): error C2065: 'Agent' : identificateur non déclaré
Poster le code est beaucoup plus utile que de l'affichage de l'erreur. L'affichage est le meilleur.
Mike, le code est près de 50 000 lignes de code. J'ai besoin de couper et de la construction d'un petit cas de de il qui reproduit les erreurs. En attendant, je ne sais pas mettre inclure des fichiers sur le dessus de la rpc fichier permettrait de résoudre la référence directe problème. Je suppose que votre réponse va résoudre mon problème.
Ajout d'un diagramme. J'espère que ça aidera.

OriginalL'auteur wmac | 2012-06-11