Globale Klasseninstanz in Multifile- Projekt
-
Hallo,
ich werde kurz mal meine Ausgangssituation schildern:
Ich soll in ein Programm, welches ich selbst nicht geschrieben habe, eine neue Klasse implementieren und einige neue Klassenmethoden ausführen.
Das Programm selbst ist extrem umfangreich und ich möchte möglichst wenig am Quellcode ändern, um die Implementierung umzusetzen. Ausgegangen wird von 3 Klassen+ meiner neuen Klasse. Pseudocode- sieht folgendermaßen aus:Klasse1(){ float* m_CalibX, m_CalibY; .. } Klasse2(){ char* m_ImageData[]; .. } Klasse3(){ float x,y,z; .. } NeueKlasse(){ Methode1(x,y,z); Methode2(m_ImageData); Methode3(m_CalibX, m_CalibY);Ich brauche für meine neue Klasse also Parameter aus 3 verschiedenen Klassen, welche voneinander nichts wissen.
Ich muss also irgendwo eine Klasseninstanz der KlasseNeu erzeugen, die diesen 3 Klassen bekannt ist.Ich habe das nun so umgesetzt, dass ich einfach einen Header geschrieben habe, mit:
//Klasseninstanz.h #include "NeueKlasse." static NeueKlasse KlasseInstanz;diesen Header habe ich in den 3 anderen Klassen eingebunden, und die Klasseninstanz somit mit den jeweiligen Parametern gefüttert.
Kann man das so machen, oder führt das später zu logischen Fehlern/ Bugs im Programm?
Ich hoffe ich hab das einigermaßen klar beschrieben, danke schonmal für die antworten.
-
Du willst keine Klassen und keine statischen Instanzen. Was du beschreibst löst man mit freien Funktionen, ggf. in einem Namespace.
-
ie würdest du den namespace denn implementieren? ebenfalls in eine header schreiben--> includen, oder wo soll ich den namespace anlegen? ich muss aufjeden fall sicher gehen, dass x,y,z, .. , m_ImageData , .. , m_CalibX/Y zur selben klasseninstanz gehören, sonst funktioniert die implementierung nicht.
-
kann es sein, dass du nur sehr rudimentäre Kenntnisse von C++ hast?
Irgendwo wirst du doch die drei Klassen benutzen. Dort musst du die Funktionalität einbauen, weil genau hier alle Informationen sind, die du benötigst.
-
das ist nicht das problem, ich weiss genau wo ich die methoden aus neueklasse in den anderen 3 klassen aufrufen muss, wichtig ist nur dass diese zu genau derselben instanz gehören müssen. ich kann nicht in einer klasse eine instanz erstellen, dann x,y,z einlesen, dann in einer anderen klasse eine neue instanz einlesen, und anschließend m_Calib etc. einlesen.
ich denke ich habe schon eine solide basis in c++, allerdings habe ich physik und nicht informatik studiert und bisher kaum mit oop gearbeitet in c++.
-
@daddy_felix: ich glaub ich hab deine antwort falsch verstanden . .vergiss den oberen beitrag. aufjeden fall gibt es keine art "main" in dem programm in welchem die klassen 1,2,3 instanziiert werden. das sind klassen mit teilweise 10000 zeilen code und das ganze programm läuft sowieso im multi-core-processing. insgesamt ist es also ziemlich schwierig alle klassen zusammenzufassen und deswegen würde ich gerne eine ähnliche lösung wie die, die ich beschrieben habe, umsetzen.