Kein Namespace



  • Ich habe unter Projekteigenschaften die Funktion Vorkompilierten Haeder ausgeschaltet.

    Es kommt der gleiche Fehler.



  • 01Gast schrieb:

    ...

    Achte aber bitte auch auf den Kommentar von 314159265358979: "Warum überhaupt using namespace XY in Headern? Sowas macht man nicht."

    Wenn man using namespace in Headern verwendet, macht man den Sinn von Namensräumen zunichte (In jeder Datei die direkt oder indirekt diesen Header inkludiert, wird der Namensraum "entleert").

    Empfehlung: Wenn man using namespace verwendet, sollte man dies nur in Dateien machen, die nicht inkludiert werden, und nach allen Includes in der Datei. In Headern schreibt man in der Regel den Namensraum vor den Typen aus.

    P.S: Ich hoffe du hast an Includeguards gedacht.



  • Auf den Seiten von Microsoft wird mir beispielsweise dies angezeigt:
    http://msdn.microsoft.com/en-us/library/5cb46ksf(v=vs.80).aspx

    // somelib.h
    namespace SomeLib {
       class String { ... };
    }
    

    hier wirt der namespace in der Header-Datei festgelegt??.

    Könnt Ihr mir einen Link geben wie mein o.a. Beispiel mit namespace funktionieren könnte?

    Wenn ich den namespace nur in der cpp angebe, bekomme ich diesen Fehler:

    Symbol kann nicht im Namespace 'EigLib' definiert werden
    

    Ich glaub ich bin verwirrt?



  • 01Gast schrieb:

    hier wirt der namespace in der Header-Datei festgelegt??.

    Es war die Rede davon, dass du**using namespace** nicht in Headern verwenden sollst.



  • Vielen Dank _matze, das nimmt mir die Verwirrung 🙂

    In diesem Beispiel ist es so dass ich in dieser Klasse nur inline Funktionen wollte und somit keine cpp angelegt habe.

    In diesem kleinem Beispiel müsste es doch dennoch funktionieren oder?

    Vielen Dank



  • Hallo und Vielen Dank,

    ich habe jetzt eine 'leere' cpp-Datei angelegt und dort die using-directive angelegt.

    Jetzt funktioniert es!

    Vielen Dank für eure Zeit 🙂



  • Wann immer Du etwas aus dem namespace innerhalb einse Headers verwenden willst, schreibst Du eben EigLib::IrgendwasInNamespace statt IrgendwasInNamespace nebst using.

    Schon klappt das.



  • SeppJ schrieb:

    314159265358979 schrieb:

    Wozu braucht man sowas?

    Um sich selber Probleme beim Compilieren zu schaffen deren Lösung um Größenordnung mehr Zeit verschlingt als die geringe Compilezeitersparnis.

    Ich weiss ja nicht, wie mühsam Precompiled Headers bei anderen Compilern zu benutzen sind, aber unter Visual Studio ist die Handhabung sehr einfach.

    Von "gering" kann im Weiteren keine Rede sein. Zumindest sobald man etwas komplexere Abhängigkeiten hat, zahlt sich das Feature enorm aus (z.B. Boost, wo grosse Teile der Implementierung im Header stehen).



  • Nexus schrieb:

    SeppJ schrieb:

    Um sich selber Probleme beim Compilieren zu schaffen deren Lösung um Größenordnung mehr Zeit verschlingt als die geringe Compilezeitersparnis.

    Ich weiss ja nicht, wie mühsam Precompiled Headers bei anderen Compilern zu benutzen sind, aber unter Visual Studio ist die Handhabung sehr einfach.

    Ich habe nichts gegen Precompiled Header, sofern man sie in das Projekt implizit einbinden kann, nur haben diese imho nichts in den includes zu tun (spätestens wenn man den Code mit mehreren Compilern gleichzeitig verwendet stören sie sonst nur).



  • Bei Visual Studio muss man den Precompiled-Header meines Wissens ohnehin am Anfang jeder .cpp-Datei einbinden, vorheriger Code wird ignoriert.


Anmelden zum Antworten