Zwei Klassen die auf einander zugreifen



  • Hallo Leute !

    Ich habe folgendes Problem:
    Ich habe zwei Klassen die gegenseitig auf einander zugreifen. Wenn ich in einer Klasse einen Pointer vom Typ der anderen Klasse deklariere kommt eine seltsame Fehlermeldung. Hier sind meine vereinfacht dargestellte Dateien:
    a.h

    #ifndef A_H
    #define A_H
    #include <b.h>
    
    class A {
    public:
            A();
    private:
            B *bb;
    };
    #endif
    

    a.cpp

    #include <a.h>
    
    A::A() {
    
    }
    

    b.h

    #ifndef B_H
    #define B_H
    #include <a.h>
    class B {
    public:
            B();
    };
    #endif
    

    b.cpp

    #include <b.h>
    
    B::B() {
    
    }
    
    [b]main.cpp[/b]
    #include <a.h>
    int main( int argc , char* argv[] ) {
            A a;
            return 0;
    }
    

    Ich erhalte folgende Fehlermeldung von dem Compiler:
    In file included from b.h:3,
    from b.cpp:1:
    a.h:9: error: syntax error before `*' token

    Ich benutze g++ ver. 3.3 unter linux

    Bin neu in der C++ Welt und kann mit dieser Fehlermeldung nichts anfangen.
    Ich hoffe ihr könnt mir helfen.

    Vielen Dank im voraus

    Andreas



  • Erstens ist B nicht abhängig von A, also kann die #include wegfallen. Zweitens ist A nicht abhängig vom Inhalt von B, d.h. statt dem #include reicht eine Vorausdeklaration:

    class B;
    class A {
      B* bb;
    };
    

    Erst in der Implementierung von A muss dann wahrscheinlich b.h eingebunden werden.



  • Danke , deine Antwort hat mich jetzt um einiges nach vorne gebracht!
    Ist das die einzige Lösung die es gibt oder gibt es noch weitere Möglichkeiten um Abhängigkeiten zwischen Klassen zu lösen ?




Anmelden zum Antworten