Problem mit ifstream, Dateiname als string oder char[]



  • Hallo, mein erster Beitrag, meine erste Frage 🙂
    Versuche c++ zu lernen, Linux-Mint und Codeblocks installiert.
    Auf dem PC sind gnu-gcc, g++ vorhanden.
    Buch zugelegt, "Der C++ Programmierer" von U.Breymann.
    Erschwerend für mich ist, das die Beispiele aus dem Buch bei mir nicht so recht wollen:

    /* cppbuch/k2/datcopy.cpp
       Beispiel zum Buch von Ulrich Breymann: Der C++ Programmierer; Hanser Verlag
       Diese Software ist freie Software. Website zum Buch: http://www.cppbuch.de/
    */
    #include <string>
    #include <cstdlib> // für exit( )
    #include <fstream>
    #include <iostream>
    
    using namespace std;
    
    int main() {
      string dateiname;
      cout << "Quelldatei? ";
      cin >> dateiname;
      ifstream quelle(dateiname,
                      ios::binary); // Objekt für die Eingangsdatei
    

    warning: /usr/bin/g++: not a directory [enabled by default]|
    error: no matching function for call to ‘std::basic_ifstream<char>::basic_ifstream(std::string&, const openmode&)’|

    Warum meckert mein Compiler dieses an?
    Ändere ich den Typ von "dateiname" auf "char dateiname[20]", hat der Compiler nix zu meckern.

    Falsche Einstellungen Compiler/Linker Optionen?
    Möchte jetzt auch nicht jedes Stückchen Quellcode ändern müssen,
    sonst bekomme ich den Stoff in 100 Jahren nicht in den alten Kopf. 😞
    Danke für Hilfe und Nachsicht!



  • Ja, der Konstruktor will nen cstring, warum weiß ich auch nicht.

    Also

    ifstream quelle(dateiname.c_str(),
                      ios::binary);
    


  • Die fragliche Überladung des Konstruktor von ifstream , die einen std::string als erstes Argument erwartet ist erst mit C++11 dazugekommen.

    Das ist also schon mal ein gutes Anzeichen dafür, dass Dein Buch einen recht aktuellen Stand hat.

    Allerdings musst Du im g++ C++11 aktivieren.
    Irgendwo in den Compileroptionen muss noch -std=c++11 dazu.

    Die Warnung "not a directory" - da kann ich Dir auch nicht helfen.



  • Mit -std=c++11 funktioniert es.

    Super 🙂 Danke!

    Die andere Meldung, "not a directory", habe ich wegbekommen indem ich alle
    Compiler (gcc, g++ ...) in den Toolchain executables nochmal angeklickt habe.
    Nix geändert, aber danach keine Warnung mehr.

    Dann kann es ja jetzt losgehen. 👍



  • Warum findest man sowas auf den üblich verdächtigen Seiten nicht?



  • Okay, ich bin nur blind.
    Aber es ist Freitag Abend, also OK.


Log in to reply