C++ Anfaengerproblem "using namespace std" (2025)

greynox

Erfahrenes Mitglied
  • 24. März 2011
  • #1

Hallo Leute,
ich lerne, mit einem Buch "jetzt lerne ich C++" C++.
Darin steht folgende Uebung:

1.Formulieren Sie das Hallo Welt-Programm ohne die using-Anweisung zur Einbindung des std-Namensraums.

Jetzt weis ich aber nicht, ob ich etwas richtig gemacht habe.
Mein Code sieht so aus:

/***********
* Hallo Welt-Programm
*
* gibt einen Gruss auf den Bildschirm aus
*/

#include <iostream>
#include <string>

int main()
{
std::string gruss;

gruss = "Hallo Bastian!";
std::cout << gruss << std::endl;

std::cin.get();

return 0;
}

Kompiliert mit Visual c++.
Das Programm funktioniert, die *.exe ****t auch.
Ich glaube, eigentlich duerfte es doch garnicht funktionieren oder?
Bin etwas verwirrt. Hehe.
Vielen Dank fuer jede Hilfe.

T

Tim Bureck

Erfahrenes Mitglied
  • 24. März 2011
  • #2

Wie kommst du darauf, dass es nicht funktionieren dürfte? C++ Anfaengerproblem "using namespace std" (2)

Mit den Namespaces verhält es sich prinzipiell wie mit Adressen. Sie sind ein Wegweiser (in dem Fall für Compiler und Programmierer) um an einen bestimmten Typ, eine bestimmte Funktion oder sonstiges zu kommen, sowie man mit Postleitzahl und Straße/Hausnummer eine bestimmte Person/Familie adressieren kann.

So. Wie du einen Namespace ansprechen kannst, hast du oben im Quelltext (den du übrigens in [code=cpp][/code]-Tags schreiben solltest, damit man's besser lesen kann) bereits erkannt und eingesetzt. Was ist nun der Unterschied zur using-Anweisung?

C++:

using namespace std;...string gruss;gruss = "Hallo Welt!";cout << gruss << endl;

Du kannst den Namespace vor jedem Bezeichner in diesem Namespace weglassen. Das ist in etwa so wie die Post vielleicht einen Behälter hat, auf dem steht "Hier alle Pakete nach Berlin" oder so ähnlich. C++ Anfaengerproblem "using namespace std" (3)

Hoffe es ist klar geworden.

Best regards

greynox

Erfahrenes Mitglied
  • 25. März 2011
  • #3

Danke erst mal.
Ehrlich gesagt, hat es bei mir noch nicht ganz klick gemacht.
Mir ist der Unterschied nicht ganz klar. Kannst du mir vieleicht noch ein Beispiel mit den Unterschieden nennen, wann man welche schreibweise benutzt?

Zuletzt bearbeitet:

vfl_freak

Premium-User

  • 25. März 2011
  • #4

Moin,

Du kannst gleichnamige Funktionen/Datentypen etc. aus unterschiedlichen NameSpaces aufrufen :

C++:

// entweder using namespace std;using namespace xyz;string sGruss1;string sGruss2;cout( .... );cout( .... );// oder std::string sGruss1;xyz::string sGruss2;std::cout( .... );xyz::cout( .... );

Das macht immer dann Sinn, falls sich bspw. std::string und xyz::string resp. std::cout und xyz::cout in irgendeiner Form unterscheiden!
(Das ist hier nur auf die Schnelle beispielhaft geschrieben !!)

Inhaltlich sind Deine Schreibweise und die von Tim Bureck identisch.
Beim ihm wird der NameSpace halt global festgelegt und muss dann nicht jedesmal vor die Variable/Funktion geschrieben werden !

Gruß
Klaus

Gruß
Klaus

Zuletzt bearbeitet von einem Moderator:

sheel

I love Asm
  • 25. März 2011
  • #5

Hi

Die Funktionen, Variablentypen (Klassen) etc sind in verschiedene Bereiche eingeteilt.

(Nicht reales) Beispiel:
Ein Bereich Rechnen mit Funktionen wie Plus und Minus
und ein Bereich Eingabe mit inteinlesen, floateinlesen...
und Ausgabe mit intausgeben, floatausgeben...

Je nach Sinn (oder sonst irgendwie) sind in C++ viele Dinge in diese Bereiche, sog. Namespaces, eingeteilt.
cout zum Beispiel ist im Namespace std (steht sicher für Standard)
string steht auch in std

Es gibt auch Dinge ohne Namespace, die sind eben außerhalb von allen.
Schachteln kann man solche Namespaces übrigens auch.

Wenn man jetzt einfach cout verwenden würde, würde der Compiler in den Namespacefreien Bereichen nach cout suchen. Da es dort kein cout gibt: Fehler. Man muss angeben, dass man das cout aus std meint: Also std::cout.

Da liegt übrigens ein Vorteil der Namespaces: Es kann in verschiedenen Namespaces mehrere verschiedene cout ... geben; man muss nicht immer aufpassen, ob irgendein Name schon woanders vorkommt.

Also, std::cout.
Wenn man keinen Namespace angibt, ist immer der freie/globale Bereich gemeint.

Und für was jetzt using?
Mit "using namespace ...;" teilt man dem Compiler mit, dass er in der betreffenden Quellcodedatei nicht nur den Namespacefreien Bereich, sondern auch den Namespace ... durchsuchen soll, wenn da einfach cout steht.
Mit einem einzelnen "using namespace std;" kann man sich also alle "std::" in der Datei sparen.
Spart Schreibarbeit.

Gruß

PS: Zu spät...

Muepe32

Erfahrenes Mitglied
  • 26. März 2011
  • #6

Beim Thema using namespace erwähne ich gerne, dass man schauen sollte ob es wirklich eine gute Idee ist einen Namespace einzubinden - wirklich! C++ Anfaengerproblem "using namespace std" (8)

Gängige Namespaces haben viele Objekte die schnell zu Verwechslungen führen können. So gibt es im std-Namespace Objekte wie count, sort, find, ... . Das sind sehr allgemeine Namen. Ich habe bisher bessere Erfahrungen gemacht indem ich nur gewisse Elemente daraus einbinden mit der using-Direktive.

Beispiel:

C++:

#include <iostream>int main(){ using std::cout; using std::cin; using std::endl; int a = 0; cout << "a = "; cin >> a; cout << "a = " << a << endl; return 0;}

greynox

Erfahrenes Mitglied
  • 5. April 2011
  • #7

Hallo Leute, sorry das ich jetzt erst antworte.
Vielen dank für eure Beiträge. Jetzt hats klick gemacht.C++ Anfaengerproblem "using namespace std" (10)

Um antworten zu können musst du eingeloggt sein.

C++ Anfaengerproblem  "using namespace std" (2025)
Top Articles
Latest Posts
Recommended Articles
Article information

Author: Twana Towne Ret

Last Updated:

Views: 5861

Rating: 4.3 / 5 (44 voted)

Reviews: 91% of readers found this page helpful

Author information

Name: Twana Towne Ret

Birthday: 1994-03-19

Address: Apt. 990 97439 Corwin Motorway, Port Eliseoburgh, NM 99144-2618

Phone: +5958753152963

Job: National Specialist

Hobby: Kayaking, Photography, Skydiving, Embroidery, Leather crafting, Orienteering, Cooking

Introduction: My name is Twana Towne Ret, I am a famous, talented, joyous, perfect, powerful, inquisitive, lovely person who loves writing and wants to share my knowledge and understanding with you.