Fragen zum Compiler (wie er arbeitet)
-
Hallo.
Ich arbeite mich derzeit wieder in C++ ein und frage mich, wie das so mit den C++ Compilern ist.
Warum ist beispielsweise std::string bekannt, obwohl ich nur iostream einbinde (und nicht <string>)? Hab das im IRC gestellt, dann kam die aussage "Because another header is including it already"... Ja toll dacht ich mir, dann muss ja auch std::getline() gehen (ist ja in <string>) definiert. Tut es aber nicht, muss dafür nun doch <string> einbinden.
Woran liegt das?
Gruß Waldschatten
-
Ist getline() nicht in:
#include <iostream>???
-
Bei mir zumindest nicht, sobald ich <string> nichtmehr einbinde, bekomme ich den Fehler, dass der bezeichner std::getline nicht gefunden wurde.
Nutze den Compiler, der mit der VS2010 Express IDE mitgeliefert ist.
-
Waldschatten schrieb:
Warum ist beispielsweise std::string bekannt, obwohl ich nur iostream einbinde (und nicht <string>)? Hab das im IRC gestellt, dann kam die aussage "Because another header is including it already"... Ja toll dacht ich mir, dann muss ja auch std::getline() gehen (ist ja in <string>) definiert. Tut es aber nicht, muss dafür nun doch <string> einbinden.
iostream wird wohl nicht string einbinden, sondern irgendeinen internen Header, der zwar std::string, aber nicht std::getline enthält.
BTW getline befindet sich in der Tat in string, nicht in iostream.
-
Kommt drauf an welches getline gemeint ist.
Das getline, welches eine Elementfunktion der Klasse istream ist, befindet sich ja wohl nicht in string ;), sondern in iostream.
Das andere getline ist eine globale Funktion in der string-lib.Gruß freeG
-
fr33g schrieb:
Kommt drauf an welches getline gemeint ist.
Es gibt nur ein std::getline.
-
Bashar schrieb:
Es gibt nur ein std::getline.
<klugscheiss>
istream& getline ( istream& is, string& str, char delim ); istream& getline ( istream& is, string& str );</klugscheiss>
-
<klugscheiß>Nicht zu vergessen istream#getline, denn er hat nicht gesagt, dass er nur von freien Funktionen redet.</klugscheiß>
Edit: Man, red ich nen Blödsinn.
-
pumuckl schrieb:
<klugscheiss>
OK, es gibt nur zwei std::getlines

-
pumuckl schrieb:
Bashar schrieb:
Es gibt nur ein std::getline.
<klugscheiss>
istream& getline ( istream& is, string& str, char delim ); istream& getline ( istream& is, string& str );</klugscheiss>
Ist das wirklich so und nicht
istream& getline ( istream& is, string& str, char delim='\n' );?
edit: Es ist tatsächlich so wie pumuckl schreibt. Faszinierend umständlich.