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 einenstd::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.