【发布时间】:2019-11-10 09:11:43
【问题描述】:
我有两个相似的方法,它们打开一个文件的方法相同,但处理它们并返回值略有不同,但是虽然第一个方法成功地做到了,但在第一个方法之后调用的第二个方法失败了。
我尝试更改此文件的路径及其扩展名,但我想我错过了有关 ifstream 的一些重要知识。
vector<User> Database::createUserDatabase()
{
vector<User> users;
ifstream inputFile;
inputFile.open(pathToFile, ios::in);
//Some file processing
inputFile.close();
return users;
}
而且效果很好,而
vector<User> Database::createBookDatabase()
{
vector<Book> books;
ifstream inputFile;
inputFile.open(pathToFile, ios::in);
//Some file processing
inputFile.close();
return books;
}
每当我检查文件是否已打开或未使用时都无法结束
inputFile.is_open()
这些函数定义在类文件Database.cpp、User.cpp、Book.cpp中,正确链接到main.cpp,内容如下:
#include <iostream>
#include <cstdlib>
#include <string>
#include <cstring>
#include <sstream>
#include <vector>
#include <fstream>
#include "../lib/Book.h"
#include "../lib/User.h"
#include "../lib/Database.h"
using namespace std;
int main()
{
Database userDatabase("../database/users.txt", "users");
Database bookDatabase("../database/lmsdb.txt", "books");
vector<User> users = userDatabase.createUserDatabase();
vector<Book> books = bookDatabase.createBookDatabase();
return 0;
}
使用 gdb 调试器,我确认文件根本没有被打开。我假设我没有正确关闭文件,但我对 C++ 有一点了解(只学了一周左右)。
期待看到您可以建议阅读/研究什么,但我真的很想看到这个问题的直接解决方案。
【问题讨论】:
-
"vector
Database::createBookDatabase()" 有一个错误。应该是“vector Database::createBookDatabase()”。这可以编译吗? -
@ArminMontigny 这只是一个错字,我的机器上的代码是正确的。问题在于文件的路径不正确。