gegenseitige includes
-
Hallo!
ich habe zwei Klassen, die gewisse Ähnlichkeiten haben, sagen wir mal Super und Duper. Jetzt möchte ich jeweils die andere als Konstruktorargument zulassen also
#ifndef Super_H #define Super_H #include "Duper.h" Super(Duper *); #endif
und
#ifndef Duper_H #define Duper_H #include "Super.h" Duper(Super *); #endif
wenn ich das nur "in eine Richtung" mache geht es ohne Probleme.
Mein Handbuch sagt nix dazu, warum geht das nicht gleichzeitig ?
-
Du musst die Klassen vorher in der jeweils anderen Datei deklarieren, also class Super; in duper.h und class Duper in super.h.
-
danke soweit!
ich dachte es ginge, tuts aber nicht ...
was ist hier noch falsch?#ifndef Super_H #define Super_H #include "Duper.h" class Duper; class Super{ Super(Duper *); }; #endif
und
#ifndef Duper_H #define Duper_H #include "Super.h" class Super; class Duper{ Duper(Super *); }; #endif
-
Lass die includes weg.
-
einfach nur eine Vorwärtsdeklaration:
class Super; class Duper { public: Duper(Super*); ~Duper(); };
-
ok, echt vielen Dank für die Unterstützung bis hier her, aber ich muss nochmal fragen:
ich habe jetzt folgendes:
Super.h:
class Duper; class Super{ public: Super(Duper *); };
Super.cpp
#include "Super.h" Super(Duper *d){ (+) }
Duper.h
class Super; class Duper{ public: Duper(Super *); };
Duper.cpp
#include "Duper.h" Duper(Super *s){ (+) }
an den Stellen (+) bekomme ich "syntax error before * ...
Vielleicht geh ich erstmal ins Bett. Grüße,
Raphael
-
In den .cpp's musst du beide Header includen.
-
danke erstmal an killing me softly!
Und auf die Gefahr hin für blöd erklärt zu werden - ich hab das jetzt geändert
und bekomme immer noch die gleiche Fehlermeldung ...Super.h:
class Duper; class Super{ public: Super(Duper *); };
Super.cpp
#include "Super.h" #include "Duper.h" Super(Duper *d){ (+) }
Duper.h
class Super; class Duper{ public: Duper(Super *); };
Duper.cpp
#include "Duper.h" #include "Super.h" Duper(Super *s){ (+) }
an den Stellen (+) bekomme ich "syntax error before * ...
:xmas2:
-
Auch auf die Gefahr hin ihr erklärt mich für blöd: es muss doch
//super.cpp Super::Super(Duper* d){//...
heißen.
-
so gehts!
Nochmal abschließend Dankeschön an alle Beteiligten und hier die entgültige
Lösung zum Thema Vorwärtsdeklaration (vielleicht kanns ja sonst noch wer brauchen)Super.h:
class Duper; class Super{ public: Super(Duper *); };
Super.cpp
#include "Super.h" #include "Duper.h" Super::Super(Duper *d){ (+) }
Duper.h
class Super; class Duper{ public: Duper(Super *); };
Duper.cpp
#include "Duper.h" #include "Super.h" Duper::Duper(Super *s){ (+) }