如何将文件与已初始化的 ifstream 对象相关联?

How to associate file with already initialised ifstream object?

我需要一个函数来打开文件并填充我的向量。我在没有参数的向量函数(所以我会写 list = fileBeg())和带有向量参数的 void 函数(所以我会直接传递我的列表:fileBeg(list))之间考虑。我选择了第二种方式,因为我还需要我的 ifstream 对象是全局的,这样我就可以写下我的输出,这样我的函数就可以像 fileBeg(list, file) 一样工作,但我不确定该怎么做。目前我有:

void fileBeg(std::vector <student> * list, std::ifstream * file) {
    std::string fileName;
    std::cout << "Input name of file: ";
    std::cin >> fileName;
    std::ifstream (* file)(fileName);
    student temp;
    while(* file >> temp){
        (* list).push_back(temp);
    }
}

但我显然在 std::ifstream (* file)(fileName); 上犯了错误,因为它是对 ifstream 目标文件的重新定义。我需要像 (* file)(fileName) 这样的东西,就像我们写 i = 5 如果 i 已经初始化,但它不能这样工作。

我可以用全局变量来做,即使它对当前任务没问题,我也不认为这是一个好习惯。

流是不可分配的,因此即使使用正确的语法,您的方法也无法工作。

但是文件流有一个 open 方法,所以这个 file->open(fileName); 就是你要找的。

当然,您应该始终检查文件是否成功打开

file->open(fileName);
if (file->is_open())
{
    student temp;
    while (*file >> temp){
        list->push_back(temp);
}
else
{
     std::cout << "failed to open file!!\n";
}