C++Strings und die C++ String Bibliothek
-
ghorst schrieb:
Squall schrieb:
Nun ja, also ich verwenden MinGW g++. Habe schon in der iostream, istream, ostream und ios Headerdatei geschaut, aber nicht direkt das Schlüsselwort string entdeckt. Ich schau aber noch weiter.
der ist auch ein bisschen versteckt. das ist jetzt mal die include-reihenfolge für den gcc 4.2.3 unter linux, aber das sollte bei dem mingw ähnlich aussehen:
<iostream> -> <ios> -> <bits/ios_base.h> -> <bits/locale_class.h> -> <string>ob das der standard so definiert, müsste ich jetzt erst nachlesen...
Habe deine Antwort ganz übersehen.
Was mich ja wundert, dass das da funktioniert. Mir ist aber auch aufgefallen, dass iostream -> ostream -> ios -> cstdio inkludiert. Theoretisch sollte man also printf() verwenden können, kann man aber nicht!
Wieso das denn?Braunstein schrieb:
Meine derzeit älteste installierte Version,BCB5 , hat damit kein Problem.
In der Schule verwenden wir BCB5. Die soziemlich früheste Version davon und die unterstützt es nicht.
Danke,
Gruß
Squall
-
Wenn überhaupt, dann std::printf. Aber sowas braucht eigentlich nicht zu interessieren, es ist einfach ein Implementierungsdetail. Wenn du std::printf haben willst, dann holst du dir cstdio, wenn du std::string haben willst, dann holst du dir <string> etc.
-
Ich schreibe sowieso in jeden Quellcode von mir using namespace std;, von daher.^^
Nun ja, ich habe mir auch gedacht, für Zukunft immer schön string einbinden, wenn ich strings verwende. Es könnte ja sein, dass das kein Standard ist (habe nicht nachgeschaut) und deshalb woanders Probleme verursachen könnte. Mich wunderte es einfach ein wenig.
Danke für eure zahlreichen Antworten,
Gruß
Squall
-
Squall schrieb:
Ich schreibe sowieso in jeden Quellcode von mir using namespace std;, von daher.^^
Nun ja, ich habe mir auch gedacht, für Zukunft immer schön string einbinden, wenn ich strings verwende. Es könnte ja sein, dass das kein Standard ist (habe nicht nachgeschaut) und deshalb woanders Probleme verursachen könnte. Mich wunderte es einfach ein wenig.
Danke für eure zahlreichen Antworten,
Gruß
SquallEs ist definitiv kein Standard. Wenn Du std::string verwendest, musst Du <string> inkludieren. Dass die <string> indirekt über andere Header auch inkludiert wird, ist im C++ Standard allerdings nicht verboten. Man darf sich einfach nicht darauf verlassen.
Und noch so nebenbei: die <string.h> hat nichts mit der <string> zu tun. Die <string.h> ist nicht veraltet, sondern einfach nur ein C-Header. Was zu verwechlung führt ist, dass z. B. <iostream.h> veraltet ist und man <iostream> verwenden sollte. Aber das ist eine andere Geschichte.
-
tntnet schrieb:
Und noch so nebenbei: die <string.h> hat nichts mit der <string> zu tun. Die <string.h> ist nicht veraltet, sondern einfach nur ein C-Header. Was zu verwechlung führt ist, dass z. B. <iostream.h> veraltet ist und man <iostream> verwenden sollte. Aber das ist eine andere Geschichte.
Daran sieht man nur eines: C++ != C
-
Squall schrieb:
In der Schule verwenden wir BCB5. Die soziemlich früheste Version davon und die unterstützt es nicht.
Der BCB5 ist nicht die früheste Version und er unterstützt auch vollständig die C++Standardheader ohne .h. Da ich diesen Compiler in der Art verwende weiß ich das bestimmt.
Da muß ein anderer Fehler sein.[edit]Das C++Standard-Pendant zur string.h heißt übrigens cstring. Da sind die ganzen char-Array Funktionen wie strcpy und so definiert.[edit]
-
Braunstein schrieb:
Squall schrieb:
In der Schule verwenden wir BCB5. Die soziemlich früheste Version davon und die unterstützt es nicht.
Der BCB5 ist nicht die früheste Version und er unterstützt auch vollständig die C++Standardheader ohne .h. Da ich diesen Compiler in der Art verwende weiß ich das bestimmt.
Da muß ein anderer Fehler sein.Eben, ein Fehler, in BCB5. In der Schule haben wir die Version 5.02 verwendet und die unterstützt die neuen Headerdateien nicht wirklich. Sie sind als .h-Headerdateien vorhanden, aber werden auch eingebunden, wenn man das .h weglässt.
Zudem werden Namespaces nicht unterstützt.
Hier der Beweis:
http://webf19.mc6.methfessel-computers.de/bcb5.jpg
-
Squall schrieb:
Hier der Beweis:
http://webf19.mc6.methfessel-computers.de/bcb5.jpgDas ist auch nicht der BCB (BCB steht für Borland C++ Builder).