wxWidgets Projekt auf mehrere Dateien aufteilen
-
Hallo zusammen,
ich verzweifle hier gerade an einem eigentlich simplen Problem: Ich mochte eine wxWidgets-Anwendung, die aus je einer wxApp-, wxFrame- und wxWindow-Klasse besteht, auf mehrere Dateien aufteilen. Alle Beispiele, die ich gefunden habe haben die Klassen wxApp, wxFrame, usw. in einer Datei. Da mein Projekt allerdings ziemlich groß und unübersichtlich geworden ist, möchte ich es in mehrere kleinere Dateien aufteilen.
Ich möchte also z.B. eine Datei namens MyApp.cc (und MyApp.h), die ein untergeordnetes wxFrame (MyFrame.cc, MyFrame.h) definiert. Die Frame-Klasse definiert wiederum eine untergeordnete, von wxWindow abgeleitete Klasse MyWindow (MyWindow.cc, MyWindow.h), also
MyApp->MyFrame->MyWindow
Das Problem sind nun zurkuläre Abhängigkeiten: Wenn ich z.B. aus MyWindow etwas in MyFrame tun möchte, muss ich einen Include-Verweis auf MyFrame in der MyWindow.h angeben. Damit MyFrame allerdings überhaupt ein untergeordnetes wxWindow haben kann, muss ich in der MyFrame.h einen Include-Verweis auf MyWindow setzen. Sowas mag mein Compiler leider überhaupt nicht.
Dieses Problem entsteht beinahe zwangsläufig, wenn man ein wx-Projekt Projekt aufteilt und mein Fazit nach tagelangem Suchen ist, dass alle wx-Anwendungen nur aus einer Source-Datei bestehen können. Das kann doch nicht wahr sein, oder?
Grüße,
SweetNuthin
-
äh, nein, das ist nicht wahr
Viele IDEs bieten auch die Option beim Anlegen eines Projektes direkt eine MyApp.cpp/h und MyFrame.cpp/h anzulegen.
Den zirkulären include kannst du dadurch auflösen, in dem du in MyWindow.h einfach nicht die MyFrame.h einbindest,
sondern dies in die MyWindow.cpp tust. Über der Klasse MyWindow kannst du dann eine Forwarddeklaration einfügen: class MyFrame;
Dies funktioniert aber nur wenn MyWindow einen Pointer oder Referenz auf MyFrame hält.phlox
-
Vielen Dank für den Hinweis mit der Vorwärtsdeklaration, Phlox!
Hab noch nie was davon gehört, aber das ist genau das, was ich gesucht habe...