Probablemente sea una pregunta muy simple para usted: ¿Cómo (si es posible) puedo devolver un ifstream desde una función?Devolución de ifstream en una función
Básicamente, necesito obtener el nombre de archivo de una base de datos del usuario, y si la base de datos con ese nombre de archivo no existe, entonces necesito crear ese archivo para el usuario. Sé cómo hacerlo, pero solo al pedirle al usuario que reinicie el programa después de crear el archivo. Quería evitar ese inconveniente para el usuario, si es posible, pero la función de abajo no se compila en 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: Lo siento, se olvidó de decir dónde y cuál fue el error del compilador:
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
EDITAR: Cambié la función para devolver un puntero en lugar de lo sugerido por Remus, y cambié la línea en main() a "ifstream database = * getFile()"; Ahora me sale este error de nuevo, pero esta vez en la línea en 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
Lo que has enumerado no es un error del compilador, es una "nota". Mira el error real. –