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){    (+)
    }
    

Anmelden zum Antworten