Đây có thể là một câu hỏi rất ngớ ngẩn đối với bạn: Làm thế nào (nếu có thể) tôi có thể trả về ifstream từ một hàm không?Trả về ifstream trong một hàm
Về cơ bản, tôi cần lấy tên tệp của cơ sở dữ liệu từ người dùng và nếu cơ sở dữ liệu có tên tệp đó không tồn tại thì tôi cần tạo tệp đó cho người dùng. Tôi biết làm thế nào để làm điều đó, nhưng chỉ bằng cách yêu cầu người dùng khởi động lại chương trình sau khi tạo tệp. Tôi muốn tránh điều đó bất tiện cho người sử dụng nếu có thể, nhưng các chức năng dưới đây không biên dịch trong 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: xin lỗi, quên nói với bạn ở đâu và những gì các lỗi biên dịch là:
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: Tôi đã thay đổi hàm để trả về con trỏ thay vì Remus đề xuất và thay đổi dòng trong main() thành "ifstream database = * getFile()"; bây giờ tôi nhận được lỗi này một lần nữa, nhưng lần này trong dòng trong 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
Nội dung bạn liệt kê không phải là lỗi trình biên dịch, đó là "ghi chú". Nhìn vào lỗi thực tế. –