namespace
lima-city → Forum → Programmiersprachen → C/C++ und D
abschneiden
ausgabe
befehl
beitrag
bestimmte bereiche
compiler
echt klasse
fehler
fehlermeldung
folgende zeile
fragen
funktion
gleiche fehlermeldung
klasse
main
objekt
verstehe
versuch
wirkungsweise
zeile
-
Hallo,
ich h?tte eine Frage. Ich hatte gestern ein Programm bekommen, wo zwischen den includes folgende Zeile:
using namespace std;
Meine erste Frage ist: "Was macht diese Zeile?"
Wenn ich nun das Programm ausf?hren will, kommt vom Compiler (Borland C++ 5.02) eine Fehlermeldung:
Namespace name expected
Wenn ich das ?bersetzte w?rde ich meinen hei?t das, dass der Compiler einen Namen erwartet, oder nicht? K?nnt ihr mir da weiterhelfen? F?nde ich echt klasse wenn ihr mir da ein paar Antworten zu postet.
MfG
blackpanther
Beitrag ge?ndert am 10.12 15:49 von blackpanther-online -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
namespace bedeutet namensraum, wie du schon richtig festgestellt hat.
dies wurde eingef?hrt um namenskollisionen zu vermeiden.
namespace a
{
class A {};
}
namespace b
{
class A {}; // <- Das ist ne andere Klasse als die oben
}
int main(void)
{
a::A a1; // Objekt zur Klasse A aus Namensraum a
b::A a2; // Objekt zur Klasse A aus Namensraum b
}
mit "using namespace std;" holt man jetzt alle namen im namensraum std, um nicht andauernd "std::" vor die funktionen in diesem namensraum zu setzen.
(std::cout << "Text"; => cout << "Text";)
wenn dein compiler da meckert, dass der name nicht existiert, k?nnte es sein, dass du den entsprechenden header (iostream.h) nicht includest.
soweit klar?
Beitrag ge?ndert am 10/12/2004, 16:02 von des-sys -
aha,
leider habe ich mit jetzt nicht wirklich verstanden was du meintest.. Redest du von Klassen oder so. Weil "class" kenne ich aus java.
Aber w?re es m?glich, dass du mir auch sagst, warum der Fehler auftaucht, damit ich ihn beseitigen kann. Denn sonst funktioniert das Programm nicht. -
[sry f?r?s doppelpost (isses ja irgendwie)]
hast du den header iostream.h includet?
namensr?ume bedeuten nur bestimmte bereiche in denen klassen, funktionen, variablen und was auch immer stehen kann. also ein bestimmter bereich um auch unterschiedliche klassen/funktionen/variablen mit den gleichen namen ansprechen zu k?nnen. -
Ich habe mehrere includes. So steht das bei mir genau aus:
#include <iostream.h>
using namespace std;
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
Leider bringt der Compiler immer die gleiche Fehlermeldung. Da ich noch nie mit namespace gearbietet wei? ich jetzt auch nicht weiter.
-
Ich schalt mich mal eben ein:
Bei manchen Compilern ist der namespace std nicht definiert (meistens Compiler f?r Windows). Daher gibt es dann nat?rlich eine Fehlermeldung.
Hier noch mal zur Erkl?rung von namespaces:
#include <iostream.h> // je nach compiler auszukommentieren // using namespace std; namespace ausgabeform1 { void ausgabe(int i1, inti2) { cout << i1 << "\n" << i2; } } namespace ausgabeform2 { void ausgabe(int i1, int i2) { cout << i1 << " " << i2; } } using namespace ausgabeform2; int main() { ausgabe(3, 4); return 0; }
Einfach mal in der Zeile "using namespace ausgabeform2;" ausgabeform1 benutzen und schauen was passiert...
Danach sollte die Wirkungsweise von Namensbereichen klar sein. -
Also ich habe mir das Teil mal angesehen. Man kann dann also dar?ber so festlegen, wie ein befehl abgearbeitet werden soll? Ich habe als ergebnis einmal
3 4
und einmal
3
4
bekommen. Ich habe auch verstanden, dass ?ber namespace festgelegt wird, wie cout arbeitet. aber eines verstehe ich dennoch nicht. Was ist denn nun an der std falsch. Habe ich irgendwas vergessen? Muss ich erst festlegen wie dieses Namespace auszusehen hat? oder bin ich einfach nur zu blind um den Fehler zu sehen? -
blackpanther-online schrieb:
Also ich habe mir das Teil mal angesehen. Man kann dann also dar?ber so festlegen, wie ein befehl abgearbeitet werden soll? [...] Ich habe auch verstanden, dass ?ber namespace festgelegt wird, wie cout arbeitet.
Wenn man die Namensbereiche ausgabeform1 und ausgabeform2 nicht definieren w?rde, dann h?tte man ja zwei Mal die Funktion ausgabe() definiert und das geht ja nicht. Namensbereiche sind nur dazu da, um Teile des Quellcodes (normalerweise Headerdateien und Bibliotheken) in verschiedene Abschnitte zu separieren. Das hat zwei Vorteile: Mehr ?bersichtlichkeit und man kann (wie in den von des-sys und mir angef?hrten Beispielen) Funktions-, Klassen- oder Variablennamen mehrmals f?r verschiedene Dinge verwenden.
Nachtrag:
namespace hat also nichts mit cout zu tun!
blackpanther-online schrieb:
aber eines verstehe ich dennoch nicht. Was ist denn nun an der std falsch. Habe ich irgendwas vergessen? Muss ich erst festlegen wie dieses Namespace auszusehen hat? oder bin ich einfach nur zu blind um den Fehler zu sehen?
Wie ich oben schon schrieb, manche Compiler haben den sonst ?blichen (und ich glaube auch in ISO C++ festgelegten) Namensbereich std einfach weggelassen und die darin enthaltenen Klassen einfach "global" definiert. Bei deinem Compiler scheint das auch so zu sein, also kommentier die Zeile "using namespace std;" einfach aus, weil es des namespace std bei dir n?mlich einfach nicht gibt. Das ist so, als w?rdest du versuchen eine Headerdatei zu inkludieren, die es gar nicht gibt, da bekommst du ja dann auch einen Fehler.
Beitrag ge?ndert am 10.12 16:45 von 0-checka -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage