HILFE... ohne "using namespace std;" geht nix
-
Hallo,
Vielleicht kann mir jemand helfen (Ich schnalls einfach nicht...)
Ich ill mit C++ anfangen. Also ein Buch rausgesucht, "Visual C++ 2005 Express" runtergeladen (ist ja jetzt free) und losgelegt wie es im Buch steht:
#include <iostream> void main(void) { cout << " Hello World\n"; }Nix passiert... compiler meldet Fehler

Also gegoogelt und siehe da: Wenn ich "using namespace std;" einfüge klappt es. Also sieht das ganze so aus:
#include <iostream> using namespace std; main() { cout << " Hello World\n"; }Ich habe dann mal verschiedene Bücher durchgeblätter, fand aber in keinem eine Erklärung dazu. O.K. inzwischen weiss ich das damit die Namensräume "importiert" werden. Aber ich kann doch nicht immer alle Namensräume (also auch die von Funktionen die ich gar nicht brauche) importieren wenn ich ein kleines schlanke programm schreiben will !
Und warum steht das nirgendwo ??? Das Buch über C++ ist von 2002. O.K ist ein bisschen älter, haben sich denn die Grundlagen SO geändert ??? Sind die Headerdateien denn nun alle mit Namensräumen geschrieben ??? Muss ich jetzt vor jeder Funktion die ich aus einer Headerdatei aufrufe ein std:: schreiben ???
Ich hoffe hier kann mir jemand helfen.
Dahintergekommen bin ich übrigends erst als ich DEV-C++ installiert habe, denn der schreibt das "using namespace std;" gleich mit rein wenn man ein neues Projekt aufmacht. Warum macht das Visual C++ nicht ???
Bjoern
-
Hallo
Du kannst auch folgendes schreiben:
#include <iostream> int main(void) { std::cout <<"Hello World"<<std::endl; }Namensräume sind dafür da Namenskonflikte zu vermeiden. Zum Beispiel nennst du eine Klasse CWindow (ich würde das C ja weglassen, aber ...) und jemand anders nennt sich auch so und will beide in einem Programm benutzen, dann gibt es ein problem, weil beide Klassen den gleichen Namen haben. Wenn du nun deine Klasse aber in einen namespace packst gibt es keine Probelem mehr, weil die eine Klasse dann mit CWindow und die andere Klasse mit Benutzer::CWindow angesprochen wird.
chrische
-
Ja das mit den Namensräumen ist mir schon klar. Aber woher weiss ich denn wo ich std:: davorschreiben muss und wo nicht ?? Bei printf muss ich es ja nicht (habe ich mal ausprobiert)
Bjoern
-
Bei allen Funktionen die aus diesen Namespace stammen ... guck doch einfach ... bei einer anständigen InterliSense bekommst de alle Funktionen die darin enthalten Funktion aufgelistet...
-
erfahrung + MSDN
-
Hallo
knolle schrieb:
Ja das mit den Namensräumen ist mir schon klar. Aber woher weiss ich denn wo ich std:: davorschreiben muss und wo nicht ?? Bei printf muss ich es ja nicht (habe ich mal ausprobiert)
Bjoern
printf ist c und da gibt es keine namespaces.
chrische
-
knolle schrieb:
Aber woher weiss ich denn wo ich std:: davorschreiben muss und wo nicht ?? Bei printf muss ich es ja nicht (habe ich mal ausprobiert)
Das weiß man, in dem man das nachschlägt, z.B. im Internet, Onlinehilfe oder in einem Buch. Das macht jeder so und anders gehts auch nicht.
-
Hallo
@artchi: passt zwar nicht zum Thema, aber du hast vor kurzem ein Buch angepriesen, welches deiner Meinung nach sehr gut in c++ einführt und auch als Nachschlagewerk dienen kann. Ich habe nur leider den Titel vergessen. Kannst du den bitte noch einmal hier hinterlassen.
chrische
-