这对你来说可能是一个非常愚蠢的问题:我如何(如果可能的话)从一个函数返回一个 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
编辑:我按照 Remus 的建议更改了函数以返回指针,并将 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