C++, zwei Klassen mit gegenseitigen Bedürfnisse

Habe ich Umgerechnet eine wissenschaftliche simulation Plattform von Java in C++. Ich habe versucht, das design so weit wie möglich die gleichen wie die Vorherige Implementierung. In java wegen der späten Bindung, zirkuläre Abhängigkeiten sind gelöst, an der Laufzeit. Jedoch zirkuläre Abhängigkeiten geschaffen haben, der eine Hölle von einem Schlamassel in C++.

  1. Ist es ein automatisiertes tool, das Analysen und Listen das Rundschreiben enthält und Referenzen? (Nur Visual Studio 2010 gibt eine riesige Liste von nonsense-Fehler).
  2. Habe ich versucht, vorwärts-Verweise, wo immer möglich. Allerdings in einigen Fällen beide Klassen benötigen die Funktionalität der anderen Klasse (d.h. Aufruf von Methoden, die es unmöglich macht zu nutzen, forward reference). Diese Bedürfnisse existieren in Logic, und wenn ich radikal das design ändern, werden Sie nicht mehr als echte Welt-Interaktionen.

    Wie könnten wir implementieren zwei Klassen, die einander brauchen die Methoden und status? Ist es möglich, implementieren Sie in C++?

Beispiele:

  • Beispiel 1: ich habe eine Klasse namens "Welt", die erzeugt Objekte des Typs "Agent". Agent aufrufen muss, Welt Methoden, um Informationen aus seiner Umwelt. Welt auch braucht, um Durchlaufen die Agenten und führen Sie Ihre "run" - Methode und bekommen Ihren status (status-updates, die möglicherweise sein durchgeführt Rückseite zu lösen in diesem Abschnitt das problem aber nicht die run-Methode).
  • Beispiel 2: Agenten erstellen eine Sammlung von Ihre "Absichten". Jeder Agent muss zu Durchlaufen, seine Absichten und run/update/read Absicht status. Absichten müssen auch Informationen über die Umwelt durch den Agenten (wenn man es direkt über die "Welt" wird es schaffen, komplexe Kreise wieder) und auch Informationen von den Agenten selbst.

Unten Diagramm zeigt eine sub-Klassen, und einige Ihrer Methoden und Eigenschaften:

C++, zwei Klassen mit gegenseitigen Bedürfnisse

Wenn Sie Probleme mit Fehler, können Sie immer eine Frage stellen mit diesen Fehlern (wörtlich bitte) und jemand wird wahrscheinlich in der Lage sein, um Ihnen zu helfen. Auch diese Fehler können Unsinn Sie, aber nicht zu jemand anderem. Es ist auch sehr schwer, Fragen zu beantworten, ohne zu sehen, einen code, und ich empfehle Sie Lesen Sie die sscce.org.
Joachim, Sie sind die Art von Fehler, die generiert werden, in die zirkuläre Abhängigkeit Fällen. Klassen können nicht identifiziert werden. code 1>e:\programming\cprojt\actiondb11\actiondb\base\world.h(35): Fehler B. c2143: Syntaxfehler : fehlendes ',' vor '*' 1>e:\programming\cprojt\actiondb11\actiondb\base\world.h(36): error C2061: Syntaxfehler : Bezeichner 'Agent' 1>e:\programming\cprojt\actiondb11\actiondb\base\world.h(50): error C2065: 'Agent' : nicht deklarierter Bezeichner
Die Buchung der code ist viel mehr als hilfreich, die Buchung der Fehler. Posting beide am besten ist.
Mike, der code ist in der Nähe von 50.000 Zeilen code. Ich schneiden müssen und bauen einen kleinen Fall aus, die reproduziert den Fehler. Mittlerweile wusste ich nicht setzen, gehören Dateien über die cpp-Datei würde lösen der vorwärts-Referenz-problem. Ich denke mal, deine Antwort mein problem lösen wird.
Hinzugefügt, Diagramm. Ich hoffe, es wird helfen.

InformationsquelleAutor wmac | 2012-06-11

Schreibe einen Kommentar