Kompilierfehler bei Programm zum Lesen von Dateien



  • Ich habe ein Programm aus dem Buch "Der C++ Programmierer" abgetippt, welches eine Datei einlesen und
    ausgeben soll.

    Skript:

    #include <string>
    #include <fstream>
    #include <iostream>

    using namespace std;

    int main()
    {
    string quelldateiname;
    cout << "Quelldatei: ";
    cin >> quelldateiname; // darf wegen cin keine Leerzeichen enthalten
    ifstream quelle(quelldateiname); // Objekt für Eingabestrom

    if (!quelle)
    {
    cerr << quelldateiname << " kann nicht geöffnet werden.\n";
    }

    else {
    while (quelle) // Abbruch bei Ende oder Fehler der Datei
    {
    string zeile;
    getline(quelle, zeile); // Lesen einer Zeile
    cout << zeile << '\n'; // Anzeige
    }
    }

    return 0;
    }

    Fehlermeldung des Kompilierers (MinGW, per Kommandozeile kompiliert):

    C:\Dokumente und Einstellungen\Henry>g++ "Datei anzeigen.cpp"
    Datei anzeigen.cpp: In function 'int main()':
    Datei anzeigen.cpp:12:33: error: no matching function for call to 'std::basic_if
    stream<char>::basic_ifstream(std::__cxx11::string&)'
    ifstream quelle(quelldateiname); // Objekt f³r Eingabestrom
    ^
    In file included from Datei anzeigen.cpp:2:0:
    C:/MinGW/i686-w64-mingw32/include/c++/fstream:495:7: note: candidate: std::basic
    _ifstream<_CharT, _Traits>::basic_ifstream(const char*, std::ios_base::openmode)
    [with _CharT = char; _Traits = std::char_traits<char>; std::ios_base::openmode
    = std::_Ios_Openmode]
    basic_ifstream(const char* __s, ios_base::openmode __mode = ios_base::in)

    ^
    C:/MinGW/i686-w64-mingw32/include/c++/fstream:495:7: note: no known conversion
    for argument 1 from 'std::__cxx11::string {aka std::__cxx11::basic_string<char>
    }' to 'const char*'
    C:/MinGW/i686-w64-mingw32/include/c++/fstream:481:7: note: candidate: std::basic
    _ifstream<_CharT, _Traits>::basic_ifstream() [with _CharT = char; _Traits = std:
    :char_traits<char>]
    basic_ifstream() : __istream_type(), _M_filebuf()
    ^
    C:/MinGW/i686-w64-mingw32/include/c++/fstream:481:7: note: candidate expects 0
    arguments, 1 provided
    C:/MinGW/i686-w64-mingw32/include/c++/fstream:455:11: note: candidate: std::basi
    c_ifstream<char>::basic_ifstream(const std::basic_ifstream<char>&)
    class basic_ifstream : public basic_istream<_CharT, _Traits>
    ^
    C:/MinGW/i686-w64-mingw32/include/c++/fstream:455:11: note: no known conversio
    n for argument 1 from 'std::__cxx11::string {aka std::__cxx11::basic_string<char

    }' to 'const std::basic_ifstream<char>&'

    Aufgrund mangelnder Kentnisse ist es mir nicht möglich, die Fehlermeldung zu verstehen. Ich darum,
    dass sie mir aufzeigen, wo das Problem liegen könnte und danke vorab für Antworten!



  • Dein Compiler arbeitet nach einem veraltet C++ Standard. Probiere den Schalter -std=c++11. Wenn das nicht hilft, habe ich mich vertippt oder installiere einen anderen Compiler, z.B. Visual Studio 2015 .


  • Mod

    Du musst C++11 (oder höher) aktivieren. Kenne mich nicht so genau mit MinGW aus, wahrscheinlich aber ein Compilerschalter in der Art von -std=c++11 .

    Wie man seinen Beitrag lesbar formatiert



  • Ich habe nun folgenden Befehl in der cmd eingegeben, der laut Aussage von Seiten im Netz funktionieren müßte:

    g++ -std=c++11

    Wieder erhalte ich eine Fehlermeldung:

    g++: fatal error: no input files
    compilation terminated.

    Langsam bin ich stinksauer. Ich will verdammt nochmal programmieren, und mich nicht mit solchen Kleinigkeiten rumärgern. Da ich aber weiß, was für nette Kerle ihr seid, wollte ich euch noch mal um Rat bitten. Ich danke für Antworten.



  • Dexter1997 schrieb:

    g++ -std=c++11

    Wieder erhalte ich eine Fehlermeldung:

    `g++: fatal error: no input files

    compilation terminated.`

    g++ -std=c++11 "Datei anzeigen.cpp"

    Dexter1997 schrieb:

    Langsam bin ich stinksauer. Ich will verdammt nochmal programmieren, und mich nicht mit solchen Kleinigkeiten rumärgern.

    Hm. Der Maurer muss auch wissen, an welchem Ende man die Kelle hält?



  • Danke. Einfach nur Danke. Es hat funktioniert.



  • bei manchen Programmen mag auch -std=c++14 notwendig sein. Geht natürlich nur, wenn der Compiler C++14 unterstützt.
    mir gefällt die zusätzliche Option -Wall gut, weil sie manches anzeigt, was zwar der Compiler schluckt, aber vielleicht doch fehlerhaft ist.


Anmelden zum Antworten