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

标签 c++ c++11

如标题所示,在将 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();
}

关于c++ - 将 ifstream 对象传递给函数后如何从输入文件中读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35515255/

相关文章:

c++ - 如何在给定宽度和高度的情况下调整对象的二维 vector 的大小?

c++ - 类和结构在填充和继承方面的区别

C++11 std::shared_ptr 工作正常,但 boost::shared_ptr 崩溃,这可能是什么原因?

c++ - 用于 C++ 的 UML 免费逆向工程工具(.h/.cpp ==> 类图)

当我不知道它是否是临时的时,C++ 返回类型

c++ - 向下指针键入与 shared_ptr 一起使用的级别

c++ - 分配给引用参数会使对象无效

c++ - 将二维数组从 C++ 传递到 qml

c++ - 用 C++ 字符串替换 snprintf

C++:重复的静态成员?