Namespace deklariert in file a, Nutzung in file b



  • [quote="centershock"]

    Hier werden die beiden einzelnen Klassen inkludiert:

    #include "b.h"
    #include "a.h"
    

    Ich denke, das Problem ist, dass b vor a inkludiert wird. Wenn ich nun daher in b a inkludiere, komme ich ja zu der zyklischen Abhängigkeit.

    wieso?

    es sieht im letztendlichen file doch so aus:

    // #include "b.h" wird zu
       // #include "a.h" wird zu 
             // definitionen von a
        // definitionen von b
    // #include "a.h" wird zu
        //definitionen von a, aber nicht merh genutzt wegen include guards
    

    du inkludierst so doch nur a quasi 2mal, aber da du auf jedenfall includeguards verwenden solltest, hast du kein roblem mit multipler definition...



  • Ok, auf dem Genauigkeitsgrad kommen wir nicht weiter, glaub ich...

    Macht aber nichts. Was hältst Du davon, das enum in eine dritte Datei c auszulagern und diese ausgehend von a und b zu initialisieren? Da b ja a nicht braucht, sondern nur das enum wäre die zirkuläre Abhängigkeit damit ja perdu.



  • Ok, ich hab den namespace Clamping in eine weitere Datei ausgelagert und diese dann in a und b inkludiert.

    Jetzt bekomme ich den Fehler in Klasse b:
    error: previous definition of ‘class b’

    Wo kommt das denn jetzt her?



  • Wenn b a nicht braucht, wieso steht in b.h dann:

    template<typename Tin, typename Tout> class a;
    

    ?



  • centershock schrieb:

    Ok, ich hab den namespace Clamping in eine weitere Datei ausgelagert und diese dann in a und b inkludiert.

    Jetzt bekomme ich den Fehler in Klasse b:
    error: previous definition of ‘class b’

    Wo kommt das denn jetzt her?

    Include-Guards gesetzt?



  • EOutOfResources schrieb:

    centershock schrieb:

    Ok, ich hab den namespace Clamping in eine weitere Datei ausgelagert und diese dann in a und b inkludiert.

    Jetzt bekomme ich den Fehler in Klasse b:
    error: previous definition of ‘class b’

    Wo kommt das denn jetzt her?

    Include-Guards gesetzt?

    oder wenigstens

    #pragma once
    


  • Skym0sh0 schrieb:

    oder wenigstens

    #pragma once
    

    Leider nicht Standard. Ich hoffe, sie werden es irgendwann einmal standardisieren.



  • ja, dass es nicht standard ist weiss ich...

    mh, ich weiss nicht wieso, aber ich mag pragma once nicht. die normalen include guards per #ifndef und #define sind mir viel lieber...

    wobei eigentlich ist so wie in java schöner, aber alles rein subjektive empfindung...



  • Gott sei Dank, es funktioniert endlich!!!

    Ich hab die Datei, in die ich den Clamping-namespace ausgelagert hab, nur in class b inkludiert und die Include-Guards gesetzt. Dann hat es funktioniert.

    Ich danke euch *vielmals* für eure Hilfe!!

    Gruß,
    centershock



  • a nutzt das aber auch. Klar nutzt b auch c und daher ist das Inkludieren von b in a für den Moment ausreichend, aber c in a und in b zu inkludieren, sollte nicht zu einem Fehler führen und ist eigentlich auch die sauberere Lösung.



  • Du hast recht, es in beiden Klassen zu inkludieren ist besser.

    Hab ich jetzt auch gemacht und führt auch nicht zu einem Fehler!



  • centershock schrieb:

    Hab ich jetzt auch gemacht und führt auch nicht zu einem Fehler!

    Demzufolge hattest du die Include-Guards vergessen, nicht?

    EDIT: Zeitform gefixt



  • Ich hab Include-Guards in beiden Dateien und es führt nicht zu einem Fehler...


Anmelden zum Antworten