问题描述
fstream 对象不可复制。通过引用代替: fstream& :
$ bvoid vowel(fstream& a)
请注意,您可以避免调用 open()通过向构造函数提供相同的参数:
fstream a(temp.txt,ios :: in ); (!a.eof())
$ b $ p $并不使用 / code>,请立即检查读取操作的结果。只有当试图读取超出文件中最后一个字符时才会设置 eof()。这意味着当前面调用 get(ch)读取最后一行时,!a.eof()字符,但后续 get(ch)会失败并设置eof,但代码在处理完成之后才会注意到失败 ch
示例正确的结构:
while(a.get(ch)){
#include <iostream.h> #include <fstream.h> #include <stdlib.h> void vowel(fstream a){ char ch; int ctr = 0; while(!a.eof()){ a.get(ch); if (ch == 'A' || ch == 'E' || ch == 'I' || ch == 'O' || ch == 'U'){ cout << ch; ctr++; } } cout << "Number of Vowels: " << ctr; } main(){ fstream a; a.open("temp.txt", ios::in); vowel(a); return 0; }In this simple program , I am trying t count the number of caps Vowels in the file temp.txt. However, I am getting the error:
Instead opening the file in the function itself does the job.Why is it so?Thanks a lot
NB:
Here it says, that it should work the way I am trying.
Rick
解决方案An fstream object is not copyable. Pass by reference instead: fstream&:
void vowel(fstream& a)Note you can avoid the call to open() by providing the same arguments to the constructor:
fstream a("temp.txt", ios::in);and don't use while(!a.eof()), check the result of read operations immediately. The eof() will only be set when an attempt is made to read beyond the last character in the file. This means that !a.eof() will be true when the previous call to get(ch) read the last character from the file, but subsequent get(ch) will fail and set eof but the code won't notice the failure until after it has processed ch again even though the read failed.
Example correct structure:
while (a.get(ch)) {
这篇关于使用fstream对象作为函数参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!