Problem mit Klasse
-
Hallo wenn ich mein Programm Kompilieren möchte bekomme ich folgende Fehlermeldung:
[C++ Fataler Fehler] calc.h(1): F1005 Include-Dateien zu tief verschachtelt
Aber leider kann ich mit der Fehlermeldung nichts anfangen.

Was mache ich falsch ?
main.cpp
#include <iostream> #include "calc.h" using namespace std; int main() { system("PAUSE"); return 0; }calc.h
#include <iostream> #include "calc_prog.h" using namespace std; #ifndef calc_prog.h #define calc_prog.h class calc { private: public: int add(); }; #endifcalc_prog.h
#include <iostream> #include "calc.h" using namespace std; #ifndef calc_prog.h #define calc_prog.h int calc :: add () { cout<<"test"<<endl; } #endif
-
In der main inkludierst du calc.h
In der calc.h inkludierst du calc_prog.h
In der calc_prog.h inkludierst du calc.h
In der calc.h inkludierst du calc_prog.h
In der calc_prog.h inkludierst du calc.h
In der calc.h inkludierst du calc_prog.h
In der calc_prog.h inkludierst du calc.h
In der calc.h inkludierst du calc_prog.h
In der calc_prog.h inkludierst du calc.h
In der calc.h inkludierst du calc_prog.h
In der calc_prog.h inkludierst du calc.h
In der calc.h inkludierst du calc_prog.h
In der calc_prog.h inkludierst du calc.h
In der calc.h inkludierst du calc_prog.h
In der calc_prog.h inkludierst du calc.h
In der calc.h inkludierst du calc_prog.h
Und so weiter...Ein #include ist reine Text-Substitution. Der Inhalt der zu inkludierenden Datei wird quasi reinkopiert.
Wenn sich zwei Dateien gegenseitig inkludieren hast du sowieso schon ein sehr schlechtes Design, das du überdenken solltest.
-
Außerdem verwendet man nie using namespaces in Headern. Damit importierst du den ganzen Namespaces in jedes Modul, dass die problematische Headerdatei direkt oder indirekt einbindet.
-
Wie macht man es den richtig ?
-
stell doch fürs erste mal die zeilen 6 und 7 an den anfang der calc.h bzw. calc_prog.h dateien.
calc_prog.h kommt evtl. in eine calc.cc datei?lg lolo
-
In die Header-Datei kommt die Klassendefinition:
class Foo { void method(); };In die Source-Datei kommen die Definitionen der Funktionen:
#include "fooHeaderDatei" void Foo::method() { }In jeder anderen Datei, in der du die Klasse benutzen möchtest, bindest du die Header-Datei ein.
-
Also dann müsste das ja bei mir eigentlich so aussehen oder ?
Wie kann ich das dann jetzt Kompilieren o_O ?
main.cpp
#include <iostream> #include "calc.h" using namespace std; int main() { calc a; a.add(); system("PAUSE"); }calc.h
#include <iostream> using namespace std; class calc { private: public: int add(); };calc_prog.cpp
#include <iostream> #include "calc_prog.h" #ifndef calc_prog.h #define calc_prog.h using namespace std; int calc :: add () { cout<<"test"<<endl; } #endif
-
Muss man da so ein Makefile erstellen ?
-
Makefiles machen das kompilieren nur einfacher. Sie sind nie notwendig.
-
Habs jetzt hinbekommen danke für die Hilfe.