namespace in headerdatein?!



  • hi leute,

    bitte schlagt mich nich, aber ich weiß es nun mal nich besser. Ich hab vor kurzem gelesen, dass es erstens schlechter stil is und zweitens es zu mordsproblemen kommen kann, wenn man in header datein die using namespace deriktive verwendet. Wieso. Kann mir jemand das plausibel erklären. Und bitte nich schlagen 😉

    danke im vorraus und ciao 😃



  • Ja, weil wenn du den Header inkludierst, der using namespace logischerweise auch für die Datei gilt, die den Header inkludiert.

    // a.h
    #include <string>
    using namespace std;
    
    // b.h
    #include "a.h"
    
    class string {};
    

    Nun, a.h ist in b.h. include ist nur eine unintelligente Texteinfügefunktion. Der Präprozessor setzt ja tatsächlich a.h per Copy+Paste an die Stelle von #include "a.h" ein.

    somit ist class string in b.h automatisch im namespace std. Doppeldefinition einer bereits vorhandenen Klasse (std::string). Obwohl in b.h kein Wort von std die Rede ist.



  • NwP schrieb:

    Und bitte nich schlagen 😉

    Tut mir Leid, aber es muss sein!

    #include <superlib> // definiert superlib::string
    
    /* in irgendeinem includeten header: */
    #include <string>
    using namespace std;
    /* ende irgendein includeter header */
    
    int main() {
        using superlib::string;
        string ohmeingott; // was nun, std::string oder meinesuperlib::string
    }
    

    Achja, bevor ihr fragt: Meine superlib gibts nicht fuer euch. Die ist so gut das wuerde die Menschheit nicht verkraften.



  • Schade schande... 1sec! Nur weil ich erst den Nick vergessen hab. :xmas1:



  • @entenwickler: jez wo ichs sehe isses klar. gut danke habs kapiert. Schläge kassiert und ich mach den fehler nich mehr^^



  • Entenwickler schrieb:

    Achja, bevor ihr fragt: Meine superlib gibts nicht fuer euch. Die ist so gut das wuerde die Menschheit nicht verkraften.

    Da hast du doch nur Java in C++ nachentenwickelt. :p


Anmelden zum Antworten