如何将 ifstream 对象传递给函数后从输入文件中读取

How do I read from an input file after passing the ifstream object to a function?

本文关键字:输入 文件 读取 函数 ifstream 对象      更新时间:2023-10-16

正如标题所暗示的那样,我在将ifstream对象传递给类函数后无法从输入文件中读取问题。基本上,我正在尝试使用通过数组实现的堆 ADT 对数字列表进行排序。

int main() {
   ifstream infile("input.txt");
   HeapSort* heap = new HeapSort(20); // creates a heap (array) with size 20
   heap->buildHeap(&infile);
   return 0;
}
void HeapSort::buildHeap(ifstream* infile) {
    int data;
    while (infile >> data) {cout << data << endl;}
    infile->close();
}

错误发生在 buildHeap 内部 while 循环的条件中。编译器无法识别"int"和"ifstream"对象之间的运算符">>"。然而,奇怪的是,如果我在 main() 中编写相同的 while 循环,它会正常工作。另外值得注意的是,如果我删除 while 循环,编译器不会返回任何错误。这意味着,简单地将 ifstream 对象从 main 传递到 buildHeap 的行为是可以的。

请避免提出实现此目的的替代方法。我被要求不要使用任何特殊的 fstream 函数,如 eof()。我只能使用">>"运算符从所需的文件中读取。

您正在传递指向流的指针,因此您需要取消引用它:

while (*infile >> data)

如果您希望代码看起来像您在 main 中所说的那样,那么您可以传递一个引用:

heap->buildHeap(infile);
//...
void HeapSort::buildHeap(ifstream& infile) 
{
    int data;
    while (infile >> data) { ... }
    infile.close();
}