Voici probablement une question très noobish: Comment (si possible) puis-je retourner un ifstream à partir d'une fonction?Renvoyer ifstream dans une fonction
Fondamentalement, j'ai besoin d'obtenir le nom de fichier d'une base de données de l'utilisateur, et si la base de données avec ce nom de fichier n'existe pas, alors je dois créer ce fichier pour l'utilisateur. Je sais comment faire cela, mais seulement en demandant à l'utilisateur de redémarrer le programme après avoir créé le fichier. Je voulais éviter cet inconvénient pour l'utilisateur si possible, mais la fonction ci-après ne compile pas 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: désolé, oublié de vous dire où et ce que l'erreur du compilateur a été:
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: J'ai changé la fonction pour retourner un pointeur à la place comme Remus l'a suggéré, et changé la ligne dans main() en "ifstream database = * getFile()"; maintenant je reçois cette erreur à nouveau, mais cette fois dans la ligne principale():
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
Ce que vous avez listé n'est pas une erreur de compilation, c'est une "note". Regardez l'erreur réelle. –