Klasse aus späterer header datei nutzen



  • Hallo.

    Ich habe zwei Klassen unterschiedlichem Typs, wobei jede eine Referenz auf die andere enthält.

    /*Enthalten in /Header/Header1.h*/
    typedef class Class1{
        private:
    
        public:
            class Class2 C; /*Fehler!*/
    
            Class1(){
                C = NULL;
            }
    }Class1;
    
    /*Enthalten in /Header/Header2.h*/
    typedef class Class2{
        private:
    
        public:
            class Class1 C;
    
            Class2(){
                C = NULL;
            }
    }Class2;
    
    #include "../Header/Header1.h"
    #include "../Header/Header2.h"
    

    Mein Compiler meckert da jetzt verständlicherweise in Class1, weil er Class2 noch nicht kennt. Ich dachte, ich könnte das wie bei den structs mit dem typedef und dem struct / class vor den Typen, aber es kommt weiter die Fehlermeldung "Class1::Class2 used undefined class 'Class2'".

    Wie kann ich damit umgehen, denn die Reihenfolge der Headerfiles zu vertauschen, wird ja das Problem nur verschieben.

    Gruß,
    CJens



  • Struct und class sind in C++ fast identisch. Der Unterschied: in structs ist alles public, wenn nichts anderes gesagt wird, in class private. Typedef und gedöns ist bei beiden unnötig.

    Du hast zwei Probleme:

    1. verwende Pointer
    2. benutze eine Vorwärtsdeklaration

    NULL war in C++ schon immer Müll. Benutze ab C++11 nullptr, sonst 0.



  • Wenn die beiden Klassen nur Referenzen auf die jeweils andere enthalten :

    Class1.h
    
    // forward declaration
    class Class2;
    
    class Class1
    {
       Class2& c2_;
    
    public:
       Class1( Class2& c2 ) : c2_( c2 )
       {
       }
    };
    
    Class2.h
    
    //foward declaration
    class Class1;
    
    class Class2
    {
       Class1 c1_;
    
    public:
       Class2( Class1& c1 ) : c1_( c1 )
       {
       }
    };
    

    In beiden .cpp Dateien musst du dann class1.h und class2.h inkludieren.


Anmelden zum Antworten