using derektiven innerhalb von Klassen
-
Deine Argumente sind mir teilweise auch schon eingefallen und in meinem Buch begegnet.
Dann würd ich sagen, schreib ich ab jetzt immer std:: davor.
Aber dennoch würde mich interessieren, warum ich überhaupt in meinem geposteten Beispiel Probleme habe...-.-^^
-
Weil du mit der using-Direktive behauptest, dass du std::string als member hast (nicht ein objekt von dem Typ, sondern den Typen selber). Da std::string aber ein externer Typ ist, der mit deiner Klasse erstmal so garnichts zu tun hat, weiss der Compiler nicht, wie er das als Member machen soll.
-
777 schrieb:
... hab ich gedacht, dass es ja dumm ist immer oberhalb der Headerdateien using namespace std; zu schreiben, da das nur unnötig RAM belegt.

ohoh, da müssen wir aber mal was klar stellen. "using namespace std;" belegt keinen RAM. es sollte auch eigentlich nicht deine executable aufblähen. namespaces sind etwas intimes zwischen dir und deinem compiler.
das hat nichts mit dem späteren maschinencode zu tun, und erst recht nicht mit deiner CPU.und das nochmal zu verdeutlichen, stell dir mal die frage:
WO bitte wird bei using namespace std; speicherplatz für eine variable/ein objekt/einen pointer, was auch immer, reserviert? o.O falls du weiterhin auf deine these bestehst...kannst du mir sagen, wieviel sizeof(std) ist? x))
-
hey schrieb:
777 schrieb:
... hab ich gedacht, dass es ja dumm ist immer oberhalb der Headerdateien using namespace std; zu schreiben, da das nur unnötig RAM belegt.

ohoh, da müssen wir aber mal was klar stellen. "using namespace std;" belegt keinen RAM. ...Doch - im Editor !

Gruß,
Simon2.
-
Dann wird also nur deswegen von der using namespace direktive abgeraten, weil es dann zu namenskonflikten kommen kann?
-
using namespace direktiven sind im grunde genommen nur Arbeitshilfen fuer tippfaule. Folgendes Beispiel zeigt, was so eine using-Direktive im header anstellen kann:
/// HeaderA.h ///////////////// #include <iostream> using namespace std; //ab jetzt guckt der compiler auch in std nach /*...*/ /// HeaderB.h //////////////// class pair { //eine eigene pair-Klasse die nichts mit dem std::pair zu tun hat }; /// main.cpp ///////////////// #include "HeaderB.h" #include "HeaderA.h" //oops, jetzt guckt der compiler auch hier in std nach, #include "HeaderC.h" //auch beim parsen von HeaderC !! int main() { pair p; //welches denn? mein eigenes oder std::pair? }Man kann sich vorstellen, dass solch ein unerwartetes Verhalten teils die Bedeutung eines ganzen Programms aendern kann. Der Autor von HeaderC haette es z.B. nicht vorhersehen koennen, dass beim Parsen seines headers im namespace std nachgeschaut wird...
-
777 schrieb:
Dann wird also nur deswegen von der using namespace direktive abgeraten, weil es dann zu namenskonflikten kommen kann?
Genauer: Weil Du damit Namenskonflikte bei Benutzern Deines Headers (natürlich auch bei Dir selbst) verursachen kannst.
-
777 schrieb:
Dann wird also nur deswegen von der using namespace direktive abgeraten, weil es dann zu namenskonflikten kommen kann?
Was heißt hier "nur" ?
Solche Namenskonflikte können eine Software fast komplett unbrauchbar machen.Gruß,
Simon2.
-
Und einen bei der Fehlersuche in den Wahnsinn treiben!

-
Okay- dann werd ich das ab jetzt unterlassen und nur in sehr kurzen und übersichtlichen Programmen nehmen^^Danke für eure Hilfe xD