Brei Geschrieben 15. Januar 2004 Geschrieben 15. Januar 2004 Hallo, unser lehrer hat uns versucht zu erklären was es mit using namespace std auf sich hat. Hat aber keiner richtig verstanden. hat das was mit den >> und << von den couts und cins zu tun? Könnt ihr mir helfen? Zitieren
Schledo Geschrieben 15. Januar 2004 Geschrieben 15. Januar 2004 Original geschrieben von b-r-e Hallo, unser lehrer hat uns versucht zu erklären was es mit using namespace std auf sich hat. Hat aber keiner richtig verstanden. hat das was mit den >> und << von den couts und cins zu tun? Könnt ihr mir helfen? "using namespace std" ist eine Direktive. Im Gueltigkeitsbereich der Datei wird der Namensbereich (namespace) mit dem Namen std zur Verfügung (using) gestellt. Man kann dies auch weglassen, dann müsste man aber überall cout durch std::cout ersetzen, weil die globale Variable cout zum Namensbereich std gehört. Mit dieser Direktvie tut man das einfach gesagtdem Compiler vorher sagen << und >> sind Ein- bzw. Ausgabeoparatoren und können bzw. müssen eben bei der Verwendung von z.B. cout und cin benutzt werden. Man kann diese auch überlagern (z.B. für eigene Klassen). Zitieren
Brei Geschrieben 15. Januar 2004 Autor Geschrieben 15. Januar 2004 Naja, einleuchten tut mir das noch nicht. Dass man std immer davor schreiben müsste hat unser lehrer auch gesagt. Irgendwie will das nicht in meinen Schädel. Zitieren
Knuddlbaer Geschrieben 15. Januar 2004 Geschrieben 15. Januar 2004 http://tutorial.schornboeck.net/namespace.htm Zitieren
Biotecs Geschrieben 16. Januar 2004 Geschrieben 16. Januar 2004 Wir arbeiten in der BF auch ohne using namespace std; aber wir müssen auch kein std:: vor alles setzten. Hängt das damit zusammen das wir die Headerdateien als <datei.h> einbinden und nicht als <datei>? mfg Zitieren
Knuddlbaer Geschrieben 16. Januar 2004 Geschrieben 16. Januar 2004 Jepp. iostream.h ist z.B. vor dem C++ Standard entstanden und sollte nicht genutzt werden. iostream mit std:: ist die richtige wahl. (Ich verstehe nicht wieso in Schulen so oft so nen schrott gemacht wird) Zitieren
Biotecs Geschrieben 16. Januar 2004 Geschrieben 16. Januar 2004 Ja frage ich mich auch. Allerdings wollte ich letztens using namespace std; verwenden, weil mein Buch mir das auch sagt, aber Borland C++ 5 kannte den befehl gar nicht. Zitieren
Brei Geschrieben 17. Januar 2004 Autor Geschrieben 17. Januar 2004 Jetzt bin ich noch mehr verwirrt. Wir machen das so # include <iostream> using namespac std; int main () { cout << "Ausgabe"; return 0; } wir haben Visual Studio Zitieren
Biotecs Geschrieben 17. Januar 2004 Geschrieben 17. Januar 2004 Ist doch auch richtig, so macht man das. Wie wir das in der Schule lernen ist es eigentlich nicht dem Standard entsprechend. Bei uns würde das so aussehen: # include <iostream.h> int main () { cout << "Ausgabe"; return 0; } mfg Zitieren
Brei Geschrieben 17. Januar 2004 Autor Geschrieben 17. Januar 2004 Was macht das ".h" so ausschlaggebend? Das sind doch nur namen der Headerdateien. Ist die iostream.h nicht die gleiche wie die iostream? Zitieren
Knuddlbaer Geschrieben 17. Januar 2004 Geschrieben 17. Januar 2004 Nein. Im Detail weiss ich es auch nicht, aber soviel: iostream.h wurde vor dem eigentlichen Standard entwickelt. Es wurde nicht im Standard aufgenommen. Eine weiterentwicklung, modifikation oder sonst wie (was) wurde dann als iostream in den Standard aufgenommen. iostream.h ist älter als iostream. Zudem liegt alles im Namensraums std , iostream.h liegt dagegen im globalen Namensraum. Zitieren
Timon Geschrieben 19. Januar 2004 Geschrieben 19. Januar 2004 Mal ein kleiner Versuch Namespaces zu erklären: Namespaces wurden in den ISO-Standard aufgenommen um die Namensvergabe zu vereinfachen. Sie ermöglichen z.B. Klassen, die im Grunde das selbe tun, aber unterschiedlichen Kontext haben, gleich zu benennen. Wie z.B. cin oder cout. Diese stehen in std. Es koennte aber sein, das du gleichnamige Funktionen schreibst, die z.B. ein LCD-Display bedienen. namespace lcd { void cout() { /* ... */ } // deine cout Funktion (Die Deklaration ist Schmarrn, aber hier nicht wichtig.) } void main(void) { lcd::cout(); // Das geht cout(); // würde nicht gefunden werden using namespace lcd; // Jetzt weiss der Compiler bescheid, dass er in diesem Namespace Funktionen aufrufen darf. cout(); // geht std:cout(); // Um sicher zu gehen, dass die richtige Funktion verwendet wird, kann man den Namespace nennen. } Zitieren
Timon Geschrieben 20. Januar 2004 Geschrieben 20. Januar 2004 Noch ein Nachtrag um den Unterschied zwischen <iostream> und <iostream.h> aufzuklaeren. Es handelt sich tatsächlich um zwei verschiedene Dateien. Warum iostream keine Endung mehr hat, weiss wohl nur die ISO Im Grunde sind beide gleich, iostream deklariert noch den namespace: iostream.h: extern istream cin; ///< Linked to standard input extern ostream cout; ///< Linked to standard output : usw... [/PHP] iostream: [PHP] namespace std { extern istream cin; ///< Linked to standard input extern ostream cout; ///< Linked to standard output : usw... } Zitieren
Knuddlbaer Geschrieben 20. Januar 2004 Geschrieben 20. Januar 2004 Gleich sind sie nicht, im Detail gibt es unterschiede. Da ich diese aber im Detail nie herausgesucht hab bleibt das als Übung dem Anwender überlassen Zitieren
Knuddlbaer Geschrieben 20. Januar 2004 Geschrieben 20. Januar 2004 http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=iostream#Answ Zitieren
Timon Geschrieben 20. Januar 2004 Geschrieben 20. Januar 2004 Ja, okay. Ein bisschen was hab ich ausgelassen Stroustrup möge mir vergeben. Ich bin auch eher aus der ANSI-C Ecke. Zitieren
Knuddlbaer Geschrieben 20. Januar 2004 Geschrieben 20. Januar 2004 Na is doch nich wild. Da die meisten Fragen hier ohnehin AnsiC sind, werden auch AnsiC Spezis gebraucht Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.