Ich habe eine wissenschaftliche Simulationsplattform von Java in C++ konvertiert. Ich habe versucht, das Design so gut wie möglich zu halten, wie bei der vorherigen Implementierung. In Java werden aufgrund der späten Bindung zirkuläre Abhängigkeiten zur Laufzeit aufgelöst. Circular Abhängigkeiten haben jedoch in C++ eine Hölle von Chaos geschaffen.C++, zwei Klassen mit gemeinsamen Bedürfnissen
Gibt es ein automatisiertes Tool, das die zirkulären Includes und Referenzen analysiert und auflistet? (Visual Studio 2010 gibt nur eine große Liste von unsinnigen Fehlern aus).
Ich habe versucht, Forward-Referenzen wo immer möglich zu verwenden. Jedoch benötigen in einigen Fällen beide Klassen Funktionalität der anderen Klasse (d. H. Aufruf von Methoden, die es unmöglich machen, Vorwärtsreferenz zu verwenden). Diese Bedürfnisse gibt es in der Logik und wenn ich das Design radikal verändere, werden sie nicht mehr reale Interaktionen repräsentieren.
Wie können wir zwei Klassen implementieren, die die Methoden und den Status des jeweils anderen benötigen? Ist es möglich, sie in C++ zu implementieren?
Beispiele:
- Beispiel 1: Ich habe eine Klasse "World", die Objekte des Typs "Agent" erstellt. Der Agent muss World-Methoden aufrufen, um Informationen über seine Umgebung zu erhalten. World muss auch über Agenten iterieren und ihre "run" -Methode ausführen und ihren Status abrufen (Statusaktualisierungen können möglicherweise umgekehrt durchgeführt werden, um diesen Abschnitt des Problems zu lösen, aber nicht die run-Methode).
- Beispiel 2: Agenten erstellen eine Sammlung ihrer "Absichten". Jeder Agent muss seine Absichten durchlaufen und den Intentionsstatus ausführen/aktualisieren/lesen. Intentionen müssen auch Informationen über die Umgebung durch Agenten erhalten (wenn sie direkt über "Welt" gemacht werden, werden sie wieder komplexe Kreise erzeugen) und auch Informationen über den Agenten selbst.
Die untenstehende Abbildung zeigt eine Untergruppe von Klassen und einige ihrer Methoden und Eigenschaften:
Wenn Sie Probleme mit Fehlern haben, könnten Sie immer eine Frage mit diesen Fehlern (wörtlich bitte) posten und jemand wird Ihnen höchstwahrscheinlich helfen können. Auch diese Fehler können für Sie Unsinn sein, aber nicht für jemand anderen. Es ist auch sehr schwierig, Fragen zu beantworten, ohne etwas Code zu sehen, und dazu empfehle ich Ihnen, http://sscce.org/ zu lesen. –
Joachim, Sie sind die Art von Fehlern, die in zirkulären Abhängigkeitsfällen generiert werden. Klassen können nicht identifiziert werden. 'code' 1> e: \ programmierung \ cprojt \ actiondb11 \ actiondb \ base \ world.h (35): Fehler C2143: Syntaxfehler: fehlt ',' vor '*' 1> e: \ programing \ cprojt \ actiondb11 \ actiondb \ base \ world.h (36): Fehler C2061: Syntaxfehler: Bezeichner 'Agent' 1> e: \ Programmierung \ cprojt \ actiondb11 \ actiondb \ base \ world.h (50): Fehler C2065: ' Agent ': nicht deklarierter Bezeichner – wmac
Das Posten des Codes ist viel hilfreicher als das Posten der Fehler. Posting * beide * ist am besten. –