如何将 ifstream 对象传递给函数后从输入文件中读取
How do I read from an input file after passing the ifstream object to a function?
正如标题所暗示的那样,我在将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++从输入文件中读取另一行
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 获取通过重定向传入的输入文件的名称?
- C++ 如何打开带有另一个目录的输入文件?
- C++模板编程设计问题 - 根据输入文件返回不同的类型
- 如何从输入文件 c++ 创建随机名称生成器
- 从输入文件修剪空格
- 链接器输入文件未使用,因为链接未完成,我无法获得.o
- 我正在尝试从输入文件中读取,然后使用它们的子字符串比较字符串的特定部分
- 我遇到使用 c++ 逐行读取输入文件的问题
- 使用重定向命令从 stdin 读入的字符串"<"输入文件未正确附加
- 使用 getline 从输入文件打印时如何忽略空白行
- 如何按升序对输入文件中的数字进行排序,并找到它们的范围和中值
- 数组大小由输入文件中的行数定义
- 从C++输入文件读取
- 在课堂上创建了一个朋友,给出"无输入文件"错误
- 通过显示一行星号来创建条形图,该条形图将读取数据的输入文件
- 利用输入文件中的数据(字符串和int)并在循环中利用
- C++ 仅读取输入文件中的部分(不是全部)数据以添加到记录中
- 如何从输入文件中读取字符并将其存储到向量中?