Marcel schrieb:
> Klasse A sind die eigentlichen Daten. Klasse A hat Funktionen die Klasse
> B als Argument bekommen.
Dafür reicht erst mal eine Vorwärtsdeklaration vor A
> Klasse B verwaltet einen Vektor der Klasse A.
Dazu benötigst du Klasse A
> Wie includiere ich das nun?
In Header File für A machst du eine Vorwartsdeklaration für B rein. Du
kannst dann keine inline-Funktionen machen, die B benutzen würden. Wann
immer du B tatsächlich benutzen willst, ist eine Vorwärtsdeklaration zu
wenig.
Im Header File für B includierst du den Header für A. Dort kannst du
dann auch inline Funktionen benutzen, die irgendetwas von A benutzen.
> Im gcc bin ich gewöhnt, das einfach durch
> eine Vorwärtsdeklaration zu machen. Das klappt auch zwar auch, jedoch
> nicht in jeder Datei.
Ist eigentlich ganz einfach.
Sieh dir die entsprechenden Stellen an.
Wenn es an dieser Stelle genügt, dass der Compiler weiß "Aha, diese
Klasse gibt es tatsächlich. Das ist nicht einfach nur ein Tippfehler",
dann genügt eine Vorwärtsdeklaration. Um zb einen Pointer oder eine
Referenz zu definieren, reicht diese Information aus. Bestimmend für den
Speicherverbrauch ist dann ja nicht die Klasse A an sich, sondern der
Speicher, den der Compiler benötigt um einen Pointer oder eine Referenz
zu implementieren. Und diesen Speicherverbrauch kennt der COmpiler
natürlich. Er weiß wieviele Bytes er für einen Pointer benötigt (egal wo
der hin zeigt).
Sobald der Compiler aber Informationen über den Internen Aufbaui, wie zb
Aufruf einer Funktion der Klasse, benötigt, reicht eine
Vorwärtsdeklaration nicht mehr. Da muss dann schon die komplette
Klassendeklaration zur Verfügung stehen. Auch wenn du in Klasse B einen
Member von A machen willst, muss der Compiler den Aufbau von A kennen.
Er muss ja schliesslich wissen, wieviel Speicherplatz er dafür
reservieren muss.