如何将文件与已初始化的 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";
}
我需要一个函数来打开文件并填充我的向量。我在没有参数的向量函数(所以我会写 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";
}