c++ header und class
-
Ich habe immer probleme mit der header-organisation:
Wenn folgendes geschrieben wird:
class OldClass; class NewClass { ... OldClass* GetXY(); ... };Wann genuegt
class OldClass;und wann ist wirklich
#include "OldClass.h"erforderlich?
Ich dachte immer, zweiteres ist gefragt, wenn ich ableite oder zugreife, so dass die Infos wirklich notwendig sind, und nur ein OldClass* erfordert kein include.
Ich fummle mit VC6++ Autorenversion.
Herlichen Dank fuer eine Erleuchtung.
-
Du verwendest Deine Klasse irgentwo anders. Dann muss der Komplier diese kennen, und dies teillt man ihm mit dem entsprechenden Header mit. Wenn er sie noch benutzen soll, muss Du entweder den Qualcode einbinden, oder dem Linker sagen, wo er die Lib finden koennte.
-
Du musst genau so viel einbinden wie du benötigst. Wenn du auf Methoden oder Attribute zugreifst musst du natürlich den Header einbinden damit diese bekannt sind.
-
In Deinen Beispiel genügt die forward declaration von OldClass da du nur einen pointer auf OldClass in NewClass verwendest. Der Compiler muss in deinem Fall nur wissen wie viel Speicher in NewClass reserviert werden muss und er weiss wie gross ein Pointer oder eine Referenz ist.
Das heisst solange du nur einen Pointer oder Eine Referenz in einer Klassendeclaration verwendest genügt eine Forward-Declaration.
Sobald du von einer Klasse ableitest oder ein Objekt einer Klasse in der neuen Klasse eingebettet ist dann musst du den Header includieren.
Kurt
-
class OldClass; class NewClass { ... OldClass* GetXY(); ... };soweit ich das weis, langt das schon.
Solange du in der dazugehörigen source datei den header OldClass.h includierst.wenn du von der klasse ableitetst, dann musst du den header von der classe im header includieren.
gruß
stephan