使用fstream对象作为函数参数

Dra*_*law 10 c++ fstream function

#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;
}
Run Code Online (Sandbox Code Playgroud)

在这个简单的程序中,我试着计算temp.txt文件中的元音数量.但是,我收到错误:

在函数fstream :: fstream(fstream&)中无法访问ios :: ios(ios&)

而是在函数本身中打开文件来完成工作.为什么会这样?非常感谢

注意:

如何通过函数参数使用fstream(特别是ofstream)

在这里它说,它应该按我尝试的方式工作.

干草堆

hmj*_*mjd 12

一个fstream对象是不可拷贝.通过引用代替fstream&:

void vowel(fstream& a)
Run Code Online (Sandbox Code Playgroud)

请注意,您可以open()通过向构造函数提供相同的参数来避免调用:

fstream a("temp.txt", ios::in);
Run Code Online (Sandbox Code Playgroud)

并且不要使用while(!a.eof()),请立即检查读取操作的结果.在eof()当试图读取超出文件中的最后一个字符将只设置.这意味着!a.eof()当前一次调用get(ch)从文件中读取最后一个字符时将是真的,但后续get(ch)将失败并设置eof但是代码将不会注意到失败,直到它ch再次处理,即使读取失败.

示例正确结构:

while (a.get(ch)) {
Run Code Online (Sandbox Code Playgroud)