简体   繁体   中英

streams as function arguments, c++

Can someone tell me what is wrong in this code? Particularly the function longestLine.

When I run the code without that funcion (only using the inside of it) the program runs with no problems, but when I do it with the function it does not compile.

I dont understand the error the compiler gives but I think it has something to do with the argument of the funcion.

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

string longestLine(ifstream infile);
string promptUserForFile(ifstream & infile, string prompt="");

int main() {
    ifstream infile;
    promptUserForFile(infile);
    cout << "The longest line of the file is: " << endl;
    cout << longestLine(infile);
    return 0;
}

string promptUserForFile(ifstream & infile, string prompt) {
    while (true) {
        cout << prompt;
        string filename;
        getline(cin, filename);
        infile.open(filename.c_str());
        if (!infile.fail()) 
            return filename;
        infile.clear();
        cout << "Unable to open that file. Try again." << endl;
        if (prompt == "") 
            prompt = "Input file: ";
    }
}

string longestLine(ifstream infile) {
    int length = 0;
    string longest_line;
    string line;
    while (getline(infile, line)) {
        if (line.length() > length) {
            length = line.length();
            longest_line=line;
        }
    }
    return longest_line;    
}

I think you should pass ifstream by reference

string longestLine(ifstream& infile);

ifstream derive from ios_base , the copy constructor of stream is deleted: because streams are not copyable .

If you pass ifstream by value, the compiler will try to call the copy constructor of ifstream when you call longestLine , the compiler will definitely complain this error.

在此处输入图像描述

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM