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
    ...
    #endif
    

    oder 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
    akari

    Die includes haben in den Headern nix zu suchen. Die kommen erst in die jeweilige Implementierungsdatei.


Anmelden zum Antworten