include Problem mit Klassen

thhh

Grünschnabel
Hallo!
Als erster habe eine kleine Grundsatzfrage:

Ich habe zwei Klassen (A und B)

in der Klasse A habe ich eine Variable mit dem Typ "B"
Code:
private: B varB

in der Klasse B habe ich eine Funktion die als Parameter einen Zeiger vom Typ A übernimmt
Code:
public: void func(A*pA)

Ist das Möglich Weil der Compiler gibt mir bei der "func" Eine Fehlermeldung:
Syntaxfehler : Bezeichner 'A'

:rolleyes:
Ich weiß wahrscheinlich habe ich irgend etwas Grundsätzliches nicht verstanden.

2.Frage:
Ich habe jede Klasse in zwei Dateien:
A.h und A.cpp
in .h habe ich die Schnittstelle:
Code:
class A{public:...  private:...};
in .cpp habe ich dann die ganzen Funktionen (Wie es halt auch Visual C++ erzeugt und überhaupt denke ich Standart ist)

Wo(in welcher Datei) muss ich jetzt im Oben genannten Beispiel die Headerdateien mittels #include einbinden?

Wäre sehr dankbar über eine Antwort...
Irgendwie muss mir da etwas Grundsätzliches entgangen sein.

Grüße Thomas
 
In A.h muss B.h includet werden, da du tatsächlich ein Objekt (B) als Member der Klasse benutzt. Der Compiler muss wissen, wie gross das Objekt A komplett ist, also braucht er Info über B.

In Objekt B hingegen musst du nicht A.h includen, es reicht über die Klassendefinition von B ein "class A;" zu schreiben. Damit weiss der Compiler, dass A eine Klasse ist, und A* in der Funktion ein Pointer auf eine Instanz dieser Klasse. Das nennt man eine Forward-Deklaration.

Wenn irgend möglich, immer eine Forward-Deklaration benutzen, das Kompilieren läuft dann schneller und man läuft nicht so leicht Gefahr, eine Im-Kreis-Includierung zu bekommen.
 
(zu 2.)
Ich glaube das ist so ziemlich egal. Wenn du die Includes in deiner Header-Datei hast, dann stehen sie automatisch in den cpp-Dateien zur Verfügung, weil sie die Header-Dateien includieren.
Ich binde die Includes meistens in den Header-Dateien ein, weil ich dann kürzere Funktionen gleich in der Klassendefinition implementieren kann.
(Das alles kann auch falsch sein, ich bin halt nicht der C++-Profi)
 
Zuletzt bearbeitet:
Danke!

Danke!
Wieder einmal etwas gelernt!
Ich glaube das ist so ziemlich egal. Wenn du die Includes in deiner Header-Datei hast, dann stehen sie automatisch in den cpp-Dateien zur Verfügung, weil sie die Header-Dateien includieren.
Denke auch dass das Stimmt. Wäre zumindestens logisch.


Grüße Thomas
 
Zurück