V
Jona192 schrieb:
ich würde trotzdem gerne mal wissen, wozu eine Funktion wie foo() gedacht ist, da ich sie in mehreren code beispielen gesehen habe. Ich habe nur etwas von eine Platzhalter funktion gelesen.
Jo. Es ist egal, wie die Funktion heißt oder was sie macht. Mir ging es nur darum, daß eine Forward-Deklariation dem Compiler nicht genug Detals erzählt, daß er Methoden von B schon kennen würde unbd aufrufen könnte.
b->foo();//auch dafür, aber man könntes ja auch in die A.cpp
//verschiebten.
b->f();//auch dafür, aber man könntes ja auch in die A.cpp
//verschiebten.
b->dingsda();//auch dafür, aber man könntes ja auch in die A.cpp
//verschiebten.
b->irgendeineFunktion();//auch dafür, aber man könntes ja auch in die A.cpp
//verschiebten.
Siehe auch http://de.wikipedia.org/wiki/Metasyntaktische_Variable
Jona192 schrieb:
Außerdem würde ich auch noch gerne wissen, weshalb es dann funktioniert wenn ich das include von a.h gaaanz unten hin setzte, statt ganz an den anfang.
Die meisten lassen es sogar im Header ganz weg! In der B.cpp müdden dann eben B.hpp UND A.hpp inkludiert werden.
Man darf es auch unten hinschreiben mit dem Zweck, daß man in der B.cpp nur noch die B.hpp zu inkludieren braucht und die A.hpp nicht mehr. Hauptsache, es steht nicht oben, denn oben würden sich die beiden Klassen zyklisch gegenseitig brauchen. So braucht die B nur einen Schatten von A, der gerade mal reicht, damit man Zeiger auf A und Funktionsargumente und Funktionsrückgaben per A machen kann und sonst nix. Sobald man mehr machen will wie ein echtes A anlegen oder von einem a eine Funktion aufrufen oder Attribute anschauen, dann ist der Schatten nicht genug (und dann gehts eben einfach nicht).