Вот, наверное, очень нубский вопрос для вас: как (если это вообще возможно) я могу вернуть ifstream из функции?
По сути, мне нужно получить имя файла базы данных от пользователя, и если база данных с таким именем файла не существует, мне нужно создать этот файл для пользователя. Я знаю, как это сделать, но только попросив пользователя перезапустить программу после создания файла. Я хотел по возможности избежать этого неудобства для пользователя, но приведенная ниже функция не компилируется в 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;
}
РЕДАКТИРОВАТЬ: извините, забыл сказать вам, где и в чем была ошибка компилятора:
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
РЕДАКТИРОВАТЬ: я изменил функцию, чтобы вместо этого возвращать указатель, как предложил Ремус, и изменил строку в main() на «ifstream database = *getFile()»; теперь я снова получаю эту ошибку, но на этот раз в строке 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