Hello world Programm bricht ab.



  • Hast recht...
    ich sehe gerade auf der seite stehts schon richtig, ich habe mir nämlich genau das gleiche Tuto heruntergeladen und da steht es noch anders.

    Hier der Link, falls du es selber sehen willst.

    h**p://www.robsite.de/daten/tutorials/vcppktmp.zip

    Gibt es einen Unterschied, ob ich jetzt

    cout<<"Hello, world!"<<endl;
    

    oder

    std::cout << "Hello, world!" << std::endl;
    

    schreibe???

    mfg Nico



  • Laut dem neuen Standard liegen die Funktionen und Klassen der Standardbibliothek im Namensraum std::.

    D.h. du musst entweder in den Programm "using namespace std;" schreiben (bitte auf keinen Fall in Headern, und am besten ganz vermeiden), oder vor alle Funjktionen und Klassen der StdLib std:: schreiben.



  • das was du runtergeladen hast ist doch ein ganz anderes, nämlich das von volkard.de



  • Ohhh......
    verdammt...
    Stimmt hast echt, aus dem hatte ich auch den Quellcode, muss wohl ein bischen durcheinander gekommen sein durch die vielen Tutorials, die ich gerade offen habe.

    Sry für die Verwirrung

    mfg Nico



  • int main hate keinen rückgabewert.... dürfte ne warnung geben oder einen fehler.



  • dgrat schrieb:

    int main hate keinen rückgabewert.... dürfte ne warnung geben oder einen fehler.

    Es ist ausdrücklich erlaubt, die return-Anweisung von main() wegzulassen - in dem Fall endet das Programm mit einem impliziten "return 0;".



  • Und wo liegt der Unterschied zwischen

    cout<<"Hello, world!"<<endl;
    

    und

    std::cout << "Hello, world!" << std::endl;
    

    bzw.

    cin.get();
    

    und

    std::cin.get()
    

    also ich verstehe nicht wirklich, was dieses

    std::
    

    davor bewirkt?

    mfg Nico



  • wlkikiv:

    The-Kenny schrieb:

    Laut dem neuen Standard liegen die Funktionen und Klassen der Standardbibliothek im Namensraum std::.

    D.h. du musst entweder in den Programm "using namespace std;" schreiben (bitte auf keinen Fall in Headern, und am besten ganz vermeiden), oder vor alle Funjktionen und Klassen der StdLib std:: schreiben.



  • MrMyagi schrieb:

    Und wo liegt der Unterschied zwischen...

    Diese "std::" Angabe ist eine Untergliederung in Namensräume. Gehen wir weiter: Was sind Namensräume, und welchen Sinn haben diese? Und warum war die Angabe früher nicht nötig (Beispiel: <iostream.h> kontra <iostream>) ?

    So... holen wir ein wenig aus. Nehmen wir mal an du schreibst ein Projekt und käufst später eine Bibliothek dazu. Nun nehmen wir zudem an das du eine Klasse abc hast, in der Bibliothek gibt es aber auch eine Klasse mit dem namen. Was nun? Gut, du könntest deine Klasse umnennen (ob nun durch das hinzufügen irgendeines Kriptischen Kürzels, so wie die MFC "C" angefügt hat, Watcom-Klassen ein "W"...) oder wir brauchen ein weiteres Sprachmittel.

    Hier kommen die Namensräume in das Spiel: Namensräume lassen eine Untergliederung zu. Und mit dem C++98 Standard wurde definiert das alle Header der Standardbibliothek nun im Namensraum "std" liegen. Boost benutzt z.B. "boost" als Namensraum. So, das erklärt schon einmal warum es inzwischen std::cout stadt cout heißt.

    Was ist aber nun wenn man definitiv keine Namenskonflikte hat? Dann kann man einzelne Namensräume oder Teile davon mit "using namespace" direkt sichtbar machen. Dies sollte aber niemals in einen Header geschehen (Grund weiter unten).

    Sprich entweder:

    #include <iostream>
    int main()
    {
      std::cout << "Test";
    }
    

    oder

    #include <iostream>
    using namespace std;
    int main()
    {
      cout << "Test";
    }
    

    Damit kannst du dir dann das std schenken wenn du es nicht brauchst.

    Warum sollte man "using namespace" niemals in Headern verwenden?

    Wenn du using namespace im Header einträgst verlierst du einen wesentlichen Vorteil der Namensräume: Jeder Header der diesen direkt oder indirekt einbindet "erbt" diese Angabe gezwungenermasen. Damit steigt wieder die Wahrscheinlichkeit für Namenskonflikte.

    cu André



  • 👍👍👍
    Danke für die schnelle Antwort,
    ich glaube jetzt habe ich es verstanden 🙂

    mfg, Nico


Anmelden zum Antworten