Header überkreuzt einbinden
-
Ist es möglich Header auch überkreuzt einzubinden.
In den Klassen-Deklarationen des jeweiligen Header wird jeweils ein Pointer auf die andere Klasse gesetzt.Wenn ich dies kompiliere kommt jeweils :
syntax error : missing ';' before '*' 'CTestklasse' : missing storage-class or type specifiers 'test' : missing storage-class or type specifiers
-
Dann definier doch die eine Klasse im voraus. Also a la "class test;" in der anderen Headerdatei. Das dürfte dein Problem lösen.
-
danke. damit klappts und ich dacht schon C++ kann sowas nicht

-
Hallo, ich habe das gleiche Problem und bin deswegen auf diesen Post gestossen.
Wenn ich jedoch versuche mit dieser Definition im voraus (class testklasse;) das Problem zu lösen, bekomme ich folgende Fehlermeldung:use of undefined type 'testklasse'
Es wäre nett wenn mir jemand weiterhelfen könnte.
-
Du musst die Vorwärtsdeklaration vor die Verwendung(en) schreiben.
Und du kannst dann auch nur mit Zeiger und Referenzen auf diesen Typ arbeiten, für die konkreten Objekte dieses Typs muss die Klassendefinition sichtbar sein.
-
Hallo
das geht schon
// Header 1 #include "Header2.h" class Klasse2; // Vordekaration class Klasse1 { ... Klasse2* obj2; }; // Header 2 #include "Header1.h" class Klasse1; // Vordekaration class Klasse2 { ... Klasse1* obj1; };bis bald
akari
-
Ahh, ich hatte das ganze nur in einem der beiden Header gemacht. Vielen Dank! Jetzt funktioniert es. Ich finde es nur Schade, dass man für so ein Standardproblem solche Tricks braucht

-
Was heißt hier Tricks? Das ist die Lösung zu deinem Standardproblem. Wenn dein Compiler automatisch "class Klasse2;" einfügen würde, wenn du irgendwo "Klasse2* pKlasse;" schreibst, dann wäre C++ nicht mehr so typsicher, denn du könntest dich ja auch nur verschrieben haben und "Klasse1* pKlasse;" gemeint haben.
Deswegen musst du die verwendeten Typen explizit sichtbar machen.
-
hmm
ich dachte dafür gibts die Sentinels?
also#ifndef HEADER_H #define HEADER_H ... #endifoder bei vc++ mit #pragma once
-
Die sind aber dazu da um Mehrfachdefinitionen zu verhindern.
Und die sind wirklich nen Trick (wobei Hack es eher treffen würde).
-
akari schrieb:
Hallo
das geht schon
// Header 1 #include "Header2.h" class Klasse2; // Vordekaration class Klasse1 { ... Klasse2* obj2; }; // Header 2 #include "Header1.h" class Klasse1; // Vordekaration class Klasse2 { ... Klasse1* obj1; };bis bald
akariDie includes haben in den Headern nix zu suchen. Die kommen erst in die jeweilige Implementierungsdatei.