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 😉


  • Mod

    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.


Anmelden zum Antworten