Brauche Hilfe, Pfad durch Variabel angeben



  • Ja das war eine Frage.
    Die Fehlermeldung lautet:

    no matching function for call to `std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(std::string&)'



  • ifstream file(pool.c_str());
    


  • Benutze nächstes Mal bitte [cpp]-Tags (und nicht [code]-Tags).

    Der std::ifstream -Konstruktor akzeptiert keinen std::string . Verwende pool.c_str() , um einen const char* zu übergeben.



  • Dankeschön für die schnelle Antwort.
    Beim nächsten mal werde ich die Cpp Tags benutzen.



  • Nexus schrieb:

    Der std::ifstream -Konstruktor akzeptiert keinen std::string . Verwende pool.c_str() , um einen const char* zu übergeben.

    Mich würde das brennend interessieren, wieso der Konstruktor nicht mit einem std::string überladen ist.



  • Interessiertererer schrieb:

    Nexus schrieb:

    Der std::ifstream -Konstruktor akzeptiert keinen std::string . Verwende pool.c_str() , um einen const char* zu übergeben.

    Mich würde das brennend interessieren, wieso der Konstruktor nicht mit einem std::string überladen ist.

    Gute Frage. Wird beim nächsten Standard auf jeden Fall eingeführt.



  • Interessiertererer schrieb:

    Mich würde das brennend interessieren, wieso der Konstruktor nicht mit einem std::string überladen ist.

    Vermutung: weil der Konstruktor von std::string (der ein const char* nimmt) nicht explicit ist und daher u. U. ungewollt std::strings erzeugt werden, was nicht erwünscht ist.



  • Nukularfüsiker schrieb:

    Vermutung: weil der Konstruktor von std::string (der ein const char* nimmt) nicht explicit ist und daher u. U. ungewollt std::strings erzeugt werden, was nicht erwünscht ist.

    Nein, das kanns nicht sein. Da käme nur const char* in Frage, und der std::ifstream bietet dafür schon eine Überladung.

    Ich tippe auf Designfehler. Vielleicht ist es den C++-Standard-Menschen so vorgekommen, als würde man Dateinamen hauptsächlich mit Literalen und C-Strings angeben. Wahrscheinlich weil es zu dieser Zeit sogar so war.



  • Nexus schrieb:

    Ich tippe auf Designfehler. Vielleicht ist es den C++-Standard-Menschen so vorgekommen, als würde man Dateinamen hauptsächlich mit Literalen und C-Strings angeben. Wahrscheinlich weil es zu dieser Zeit sogar so war.

    std::string ist ja so umstritten. Könnte auch sein, dass als die streams geplant wurden gar nicht damit gerechnet wurde, dass es einen string geben wird und darum nicht beachtet.
    Oder aber sie haben auch gedacht, dass einer reicht, weil std::string ja eine Memberfuntion c_str() hat.

    Schwer zu sagen. Kann wahrscheinlich nur jemand beantworten, wer damals dabei war.



  • drakon schrieb:

    std::string ist ja so umstritten.

    Aber damals in den Neunzigern, mitten im OOP-Hype, wo mehr Methoden immer besser waren? Denk an die Entstehung von Java. :p

    Ich denke, die Erkenntnis kam erst später mit Sutter & Co.

    drakon schrieb:

    Könnte auch sein, dass als die streams geplant wurden gar nicht damit gerechnet wurde, dass es einen string geben wird und darum nicht beachtet.

    Kann gut sein. operator<< und operator>> mit std::string sind doch global, oder? Und für std::getline() gab es auch extra eine globale Funktion, weil std::istream::getline() nur char* kennt.

    Naja, da kann man nur rätseln. Aber genug Posts für heute. 😃


Anmelden zum Antworten