Hier ist wahrscheinlich eine sehr noobish Frage für Sie: Wie (wenn überhaupt möglich) kann ich einen ifstream von einer Funktion zurückgeben?Zurückgeben von ifstream in einer Funktion
Grundsätzlich muss ich den Dateinamen einer Datenbank vom Benutzer erhalten, und wenn die Datenbank mit diesem Dateinamen nicht existiert, dann muss ich diese Datei für den Benutzer erstellen. Ich weiß, wie man das macht, aber nur, indem man den Benutzer auffordert, das Programm nach dem Erstellen der Datei neu zu starten. Ich wollte, dass die Unannehmlichkeiten für den Benutzer, wenn möglich, vermeiden, aber die Funktion unten kompiliert nicht in gcc:
ifstream getFile() {
string fileName;
cout << "Please enter in the name of the file you'd like to open: ";
cin >> fileName;
ifstream first(fileName.c_str());
if(first.fail()) {
cout << "File " << fileName << " not found.\n";
first.close();
ofstream second(fileName.c_str());
cout << "File created.\n";
second.close();
ifstream third(fileName.c_str());
return third; //compiler error here
}
else
return first;
}
EDIT: sorry, vergessen, Ihnen zu sagen, wo und was der Compiler Fehler war:
main.cpp:45: note: synthesized method ‘std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(const std::basic_ifstream<char, std::char_traits<char> >&)’ first required here
EDIT: Ich änderte die Funktion, um einen Zeiger anstelle von Remus vorgeschlagen, und änderte die Zeile in main() in "Ifstream-Datenbank = * GetFile()"; Ich bekomme jetzt wieder diesen Fehler, aber diesmal in der Linie in main():
main.cpp:27: note: synthesized method ‘std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(const std::basic_ifstream<char, std::char_traits<char> >&)’ first required here
Was Sie aufgelistet haben, ist kein Compilerfehler, es ist eine "Notiz". Sehen Sie sich den tatsächlichen Fehler an. –