using std::sowieso; weglassen ?
-
Glamdring schrieb:
Wenn iostream included wurde reicht unter den includes ein
using namespace std;
Gruß
GlamdringIn einem Header einen Namensraum offenzulegen macht den sinn des Namensraums kaputt. Wenn Du da mal konflickte hast suchst Du Dir nen wolf in welchem Header denn nun ein using namespace liegt....
Ansonsten:
Info zu iostream.h http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=iostream#Answ
-
Wie man es auch macht, es ist immer Käse.
Ist irgendwie daneben geraten bei C++ (siehe Lösung bei Java, C#).
-
Um Namenskonflikte aufzulösen, wenn es in zwei verschiedenen Namensräumen zwei identische Bezeichner gibt, sind die Namensräume von Java in einer Hierarchie geordnet.Hierbei gilt die Grundregel, dass ein Bezeichner einen identischen Bezeichner in einem übergeordneten Namensraum überdeckt
Ist das die Lösung von Java ? Dann gefälllt mir die quälende Variante von C++ besser. So nimmt der Compiler wenigstens nicht irgendwas sondern macht überdeutlich das er durcheinander ist. So kommt ein Quellcode eventuell mit einem Objekt in berührung (oder eher Klasse ?) die garnicht verarbeitet werden kann, oder vllt. sogar verarbeitet werden kann aber nicht das verhalten hat wie es beim Programmieren angenommen wurde.
-
Das Problem ist doch eher mal wieder, dass C++ kein richtiges Unitsystem hat, sondern nur good old #include, das einmal inkludierte Namen (und using-Direktiven und ...) bis in die höchste Ebene mit sich herumschleppt. Mit einem Unit-System wie in Delphi z. B. (mit Java und C# kenne ich mich nicht aus, sorry) bräuchte man sich gar keine Gedanken machen, was die Schreiber anderer Bibliotheken in ihren Dateien anstellen und wie sie dort mit irgendwelchen Sprachregeln fertig werden.
-
de_Bert schrieb:
hi
mist zu spät.
Versuch mal statt
#include <iostream>
#include <iostream.h>
wenn das nicht funzt dann sag mal welchen Kompiler du benutzt
So ein quatsch! Er soll doch keine veraltete Schreibweise nutzen, nur damit er keinen
Namensraum oeffnen muss.In ner Header schreibt man eben std:: und in den Implementationsdateien kann man dann den
Namensraum komplett oeffnen, wenn einem dass den als noetig erscheint.mfg
v R
-
operator void schrieb:
Das Problem ist doch eher mal wieder, dass C++ kein richtiges Unitsystem hat, sondern nur good old #include, das einmal inkludierte Namen (und using-Direktiven und ...) bis in die höchste Ebene mit sich herumschleppt. Mit einem Unit-System wie in Delphi z. B. (mit Java und C# kenne ich mich nicht aus, sorry) bräuchte man sich gar keine Gedanken machen, was die Schreiber anderer Bibliotheken in ihren Dateien anstellen und wie sie dort mit irgendwelchen Sprachregeln fertig werden.
Wieso ? Units haben wir doch.
Pack den kram in eine .cpp rein und der Namespace wird nicht durchgeschlappt.
Ich kenne nun aber Delphi nicht genau.Wenn ich eine Funktion geschrieben habe und will sie in einer anderen Unit verwenden, muß ich untit B doch sagen wie das ding in Unit A heisst, oder ?
Und wenn Unit B nun noch Unit C verwendet und da auch einen Namen braucht, der aber gleich ist wie in Unit A -> Mehrdeutigkeit ??
-
Nein, Delphi arbeitet eben nicht mit #include (auch wenn es {$INCLUDE} gibt) - d.h. wenn du Unit C in Unit B und Unit B in Unit A benutzt, weiß A nichts von C, sondern nur von B. Das System ist zwar auch nicht ganz perfekt (weil man eben manchmal doch will, dass Deklarationen weitergeleitet werden - wofür es aber kein Keyword gibt), war mir aber doch irgendwie lieber als das Header-System in C/C++.
-
operator void schrieb:
.
..., war mir aber doch irgendwie lieber als das Header-System in C/C++.Gibbet zu, du bist doch nur zu faul dir gedanken darueber zu machen, welche Header du
includieren musst- aber Programmierer sind ja fuer gewoehnlich faule Menschen
mfg
v R
-
operator void schrieb:
Nein, Delphi arbeitet eben nicht mit #include (auch wenn es {$INCLUDE} gibt) - d.h. wenn du Unit C in Unit B und Unit B in Unit A benutzt, weiß A nichts von C, sondern nur von B. Das System ist zwar auch nicht ganz perfekt (weil man eben manchmal doch will, dass Deklarationen weitergeleitet werden - wofür es aber kein Keyword gibt), war mir aber doch irgendwie lieber als das Header-System in C/C++.
Sry wenn ich da drauf rumreite und das mit C++ nix zu tun hat, aber mir wird das noch nicht klar.
Beispiel:
Unit FileOps
Unit PrintOpsDie zwei gibt es nun.
Nun will ich eine Unit
PrintFile erstellen die jeweils FileOps und PrintOps benötigt. Die müssen doch bekannt gemacht werden ? Was passiert nun wenn beide Units etwas deklarieren das in jeder Unit gleich heisst ?Ansonsten nehme ich an ging es darum das wenn PrintOps FileOps verwendet und PrintFile PrintOps das man die Deklarationen von FileOps nicht mehr sieht ?
-
Knuddlbaer schrieb:
Nun will ich eine Unit
PrintFile erstellen die jeweils FileOps und PrintOps benötigt. Die müssen doch bekannt gemacht werden ? Was passiert nun wenn beide Units etwas deklarieren das in jeder Unit gleich heisst ?Dann muss man den Unitnamen vor den Bezeichner setzen:
unit PrintFile; interface uses FileOps, PrintOps; //beide beinhalten bar implementation procedure foo; var i, j : Integer; begin i := FileOps.bar; j := PrintOps.bar; end; end.
-
Ahhhh jetzt ja
thx
-
Dann muss man den Unitnamen vor den Bezeichner setzen:
Und in C++ setzt man eben den Namenspace-Namen vor einen solchen Bezeichner.
Also ich sehe ja ein, dass das include-System so seine Schwächen hat, nur was genau hat das mit Qualifizieren von Namen im Zusammenhang mit Namespaces zu tun?
-
HumeSikkins schrieb:
Dann muss man den Unitnamen vor den Bezeichner setzen:
Und in C++ setzt man eben den Namenspace-Namen vor einen solchen Bezeichner.
Also ich sehe ja ein, dass das include-System so seine Schwächen hat, nur was genau hat das mit Qualifizieren von Namen im Zusammenhang mit Namespaces zu tun?
Deinheader.h { nameSpace simplerName { void foo(); } }; MeinHeader.h { void foo(); }; AndererHeader.h { #include DeinHeader.h using namespace simplerName; } Anwender.cpp { #include MeinHeader; #include AndererHeader; foo(); // mehrdeutig ? }
So find die Diskusion an ?!?