Namespace ...
-
googln is ja gut, ABER manchmal kennt man ja doch ein paar gute Seiten!!
-
Tc++H schrieb:
googln is ja gut, ABER manchmal kennt man ja doch ein paar gute Seiten!!
He he, schon gut, war ja nicht böse gemeint. Dein Buch hat aber auch schon ein paar Jährchen aufm Buckel, oder?
-
Ein Namespace ist einfach gesagt ein Ordnungssystem für Code.
Damit kannst du Code in "Schubladen" stecken.namespace aga { struct foo { int a; foo() : a(0) {} }; } namespace gag { struct foo { int a; foo () : a(0) {}; }; } using aga::foo; int main() { foo aga_foo; aga_foo.a = 14; gag::foo gag_foo; gag_foo.a =13; }
-
Naja, eine eher schlechte Beschreibung und wohl kaum primär um den Code zu "ordnen".

Namespaces wurden eingeführt, damit man Namenskonflikte zwischen mehreren Entwicklern und deren Libraries verhindern kann.
Z.B. steckt die gesamte C++ Standard-Library im Namespace std. Wemm jemand eine Klasse string definiert, wird er nicht mit der string Klasse aus dem std-Namespace in Konflikt kommen. Ich könnte z.B. meine eigene string-Klasse in den Namespace Artchi stecken.
namespace artchi { class string { }; }Ohne Namespaces würde man Namenskonflikte bekommen, wegen Doppeldeutischkeiten.
Die "Ordnung" im Projekt ist dann eher ein guter Nebeneffekt.
-
Genau das wollte ich durch mein Beispiel oben sagen ohne in tiefe Details zu gehen.
Es gibt die Schublade std:: usw.Anhand meines kleinen Codebeispieles habe ich doch gezeigt, wie zwei "gleiche" Structs in verschiedene Namespaces aufgeteilt sind und sich so eben nicht überschneiden.
Aber gut, ich hätte es mit std::string und hehejo::string machen sollen.
-
moinmoin,
wie ist denn die Handhabung von namespaces in einer headerdatei von einer klasse.
beispielsweise hab ich eine class.h und eine class.c. daß using namespace std dort absolut verboten ist, hab ich schon mitbekommen, aber sollte ich da überhaupt einen namespace reinschreiben, oder kommt man da ohne aus oder wie oder was
?gruß Martin
-
Wenn du das hier meinst:
// h Datei namespace xx { class bla { public: bla(); }; } // C++ Datei namespace xx { bla::bla() { //... } }
-
ich meinte eher die frage, ob man einen namespace benutzen muß/soll oder ob man einfach ohne namespace in der datei programmieren kann. funktionieren tut es.
wirkt sich der namespace auf die dateinen aus, in denen meine klasse eingebunden ist?[cpp]// bla.h
{
class bla
{
public:
bla();
};
}// bla.cpp
{
bla::bla()
{
//...
}
}#include bla.h
using namespace stdint main(void){
}
-
So?
//foo.h #include <string> struct Foo { void bar(const std::string&); };//foo.cpp #include "foo.h" using namespace std; void Foo::bar(const string &s) { };
-
Namespace ist auf keinem Fall ne Pflicht, aber in größeren Programmen, wo manche Klassen-, Variablen, Funktionsname mehrmals vorkommen empfielt es sich.
zb.
in der Headerdatei
namespace Physic { const float a = 2.00f; } namespace Math { const float a = 3465436.0f; }jetzt kannst du:
Math::a; bzw. Physic::a;aufrufen --> du kannst zwei Variablen mit gleichen Namen in einer Datei deklarieren.