include - files
-
hallo leute
folgende frage: wenn ich in einem project den source einer klasse auf mehrere dateien aufspalten will, warum muß ich dann in jedem cpp-file den klassen-header includieren ?
bischen source:
//datei: Unit1.cpp #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; #include "extern.cpp" (1) __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { mes(); } ***************************************************************************** // datei: Unit1.h #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // Von der IDE verwaltete Komponenten TButton *Button1; void __fastcall Button1Click(TObject *Sender); private: // Anwender-Deklarationen public: // Anwender-Deklarationen __fastcall TForm1(TComponent* Owner); void mes(void); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif ***************************************************************************** // datei: extern.cpp #include "Unit1.h" // (2) #include <vcl.h> void TForm1::mes(void) { ShowMessage("just a test..."); // zeigt ne meldung am bildschirm an }
warum muß ich in der extern.cpp die datei "Unit1.h" (2) nochmals einbinden ?
oben in der datei "Unit1.cpp" wurde vor dem einbinden von "extern.cpp" ja schon mal die "Unit1.h" eingebunden. der sollte also die klasse TForm1 schon kennen, wenn er zu extern.cpp kommt. oder hab ich da nen kompletten denkfehler ? kommt mir nicht grad logisch vor.hoffe mir kann das jemand erklaeren
Meep Meep
-
der Compiler kompiliert ja jede Code Datei einzelnd und erzeugt daraus Objekt Dateien, deswegen kennt er die Klasse nicht bei der naechsten Code Datei.
btw. der IBM Visual Age Compiler arbeitet uebrigens anders und da kannst du dir auch wirklich die Header sparen, was aber deinen Code schlecht portierbar auf andere Compiler macht
-
mercy