Eine große Header Datei mit eigenem Namensraum?



  • Hallo,

    ich habe eine kleine Header-Library geschrieben. In den meisten Dateien werden Klassen deklariert. Einen Namensraum habe ich nicht vergeben. Jetzt soll eine Header-Datei erstellt werden,
    - die alle anderen Header-Dateien includiert
    - einen Namesraum definiert

    Leider funktioniert das nicht wie gewohlt. Ein Beispiel
    src/header1.h

    class A {}
    

    src/header2.h

    class B {}
    

    headerLibrary.h

    namespace mySpace {
    #include "src/header1.h"
    #include "src/header2.h"
    }
    

    Binde ich nun in die headerLibrary.h in einer main.cpp ein, dann überschlägt sich der GCC mit Fehlermeldungen über die STL. Lasse ich die erste und letzte Zeile in der headerLibrary.h weg, dann funktioniet es.

    Was mache ich falsch? Kann ich den Namensraum nach aussen nicht so deklarieren? Muss ich in jeder Header-Datei den Namensraum seperat definieren?

    Gruß Thomas



  • Fehlt da tatsächlich der ";" hinter den Klassendefinitionen?



  • SensaI_ schrieb:

    Fehlt da tatsächlich der ";" hinter den Klassendefinitionen?

    Ja der fehlt. Aber darum geht es ja nicht.



  • Siassei schrieb:

    Muss ich in jeder Header-Datei den Namensraum seperat definieren?

    Ja



  • namensräume lassen sich auch addieren

    Headerdatei 1:

    namespace myLib
    {
      void funktion1();
    }
    

    Headerdatei 2:

    namespace myLib
    {
      void funktion2();
    }
    

    Der Namespace beinhaltet nun die beiden funktionen. Cool hm?



  • hustbaer schrieb:

    Siassei schrieb:

    Muss ich in jeder Header-Datei den Namensraum seperat definieren?

    Ja

    Schade. Gibt es dafür einen Grund?

    Ich meine mal irgendwo gelesen zu haben, dass
    test.h

    namespace xyz { #include "hello.h" }
    

    den Inhalt von hello.h in den Namensraum von xyz legt.
    z.B. hello.h

    namespace abc { class A {}; }
    

    -->

    #include "test.h"
    
    xyz::abc::A variable;
    

    Liege ich damit falsch? Wie könnte man so etwas realisieren?



  • Und was machst du wenn in "hello.h" folgendes steht:

    #include <string>
    namespace abc { class A {}; }
    

    Dann bist du angeschissen, und genau das ist der Grund warum man es nicht macht.


Anmelden zum Antworten