Oberklasse enthält Objekt der Unterklasse
-
Hallo. Ich habe das Problem, dass ich von einer Klasse eine Unterklasse abgeleitet habe, diese jedoch in der Hauptklasse benötige (quasi als Head-Pointer).
So, wie es im Code unten zu sehen ist, wird die Klasse "FolderDataHead" vom Compiler nicht erkannt, da die Klassendefinition erst später erfolgt. Die kann ich auch nicht über die Hauptklasse schreiben, da dann die Ableitung nicht erfolgt. Genauso ist es mit verschiedenen Dateien und Cross-Includen. Geht alles nicht.
class FolderData{ protected: FolderDataHead* foo; ... }; class FolderDataHead: public FolderData { ... };Ich weiß, dass ich (falls es sich um Funktionen handeln würde) die Definition ganz nach oben schreiben kann. Mit Klassen ist es mir bis jetzt nicht gelungen (habe nichts gefunden, vielleicht habe ich nicht die richtige Syntax benutzt).
Gibt es irgendwelche Möglichkeiten, das Problem zu lösen? Die Hardcoremethode wäre, den Quelltext der Hauptklasse einfach hard zu kopieren und die Klassen zu trennen, aber das ist erstens unsauber und außerdem funktionieren dann weitere Teile des Programmes nicht.
Kann mir dabei irgendjemand helfen?
-
Hmm. Ich würde da mal ganz spontan auf forwar Declaration tippen, da du ja nur einen Zeiger darauf hast. Anderseits gäbe es auch noch polymorphie und eine gemeinsame Elternklasse.
-
class FolderData{ protected: class FolderDataHead* foo; }; class FolderDataHead: public FolderData { };
-
ImFree schrieb:
class FolderData{ protected: class FolderDataHead* foo; }; class FolderDataHead: public FolderData { };Ist Vererbung denn hier überhaupt das Mittel der Wahl?
Vielleicht wäre eine Aggregation hier besser.
-
danke. vorletzteres hat geklappt.
was eine aggregation ist, muss ich wohl nochmal nachschauen

rein aus interesse: was passiert im compiler? kann ich das so verstehen, dass explizit gesagt wird, dass dies eine klasse ist und der compiler sich gedulden soll, bis die deklaration kommt?
-
Tachyon schrieb:
Ist Vererbung denn hier überhaupt das Mittel der Wahl?
Vielleicht wäre eine Aggregation hier besser.so wie ich bis jetzt angefangen hab, muss es schon vererbung sein. allerdings, wenn ich mir gerade so gedanken mache, müsste es auch mit aggretation gehen. aber auf jeden fall komme ich jetzt weiter. danke
-
zottl schrieb:
danke. vorletzteres hat geklappt.
was eine aggregation ist, muss ich wohl nochmal nachschauen ;)...
Vereinfacht gesprochen:
- "B erbt von A" = "B IST ein A"
- "B wird aggregiert von A" = "A HAT ein B"
Spannend wird das ganze bei verzweigten Strukturen (wo jede Ast selbst wieder Basis für andere Zweige sein kann) ... aber in diesem Fall scheint es mir auch eher so zu sein, dass "FolderData einen Header HAT".Gruß,
Simon2.