Ich hab angefangen mein Objekt System so umzuschreiben, dass man die Basisklassen nicht mehr explizit anspricht, sondern statt dessen in jede Klassendeklaration einfügt:
|
C-/C++-Quelltext
|
1
|
typedef [BasisObject] inherited;
|
so soll man die Möglichkeit haben Fehler durch Ändern der Basisklassen usw. vermeiden, in dem man dann entsprechend in den Funktionen anstelle von
|
C-/C++-Quelltext
|
1
2
|
Konstruktor(void) : [Basisklasse]() {}
void Funktion(void) {[Basisklasse]::Funktion(); //...}
|
schreibt
|
C-/C++-Quelltext
|
1
2
|
Konstruktor(void) : inherited() {}
void Funktion(void) {inherited::Funktion(); //...}
|
Soviel zur Theorie aus meinem visual c++
5.0 Buch. Leider klappt das hinten und vorne nicht. Wenn ich es so mache wie im Buch und die typedefs private mache gibts folgende Fehler:
|
Quellcode
|
1
2
3
|
1>[...]dynamicbodyobject.h(11) : error C2248: 'ObjSys::StaticGeoObject::inherited' : cannot access private typedef declared in class 'ObjSys::StaticGeoObject'
1> [...]staticgeoobject.h(13) : see declaration of 'ObjSys::StaticGeoObject::inherited'
1> [...]staticgeoobject.h(10) : see declaration of 'ObjSys::StaticGeoObject
|
Mache ich die typedefs dagegen public stehen alle inheriteds auf der untersten Basisklasse, dementsprechend werden einige Ebenen bei den Funktionsaufrufen übersprungen, was zu Fehlern führt.
Hat jemand sowas vielleicht schonmal gemacht und weiß wies richtig geht, oder ist die Quelle zu alt und das Konzept nicht mehr umsetzbar (was ich mir eigentlich nicht vorstellen kann)?