c ++: тип списка аргументов getline, представленный как std :: ifstream вместо std :: ifstream &? - PullRequest
0 голосов
/ 26 сентября 2019
class TextQuery
{
public:
    using line_no = std::vector<std::string>::size_type;
    TextQuery(std::ifstream&);
    QueryResult query(const std::string&) const;
private:
    std::shared_ptr<std::vector<std::string>> file;
    std::map<std::string, std::shared_ptr<std::set<line_no>>> vm;
};

TextQuery::TextQuery(std::ifstream &is): file(new std::vector<std::string>)
{
    std::string text;
    while (std::getline(is, text)) {
        file->push_back(text);
        int n = file->size() - 1;
        std::istringstream line(text);
        std::string word;
        while (line >> word) {
            auto& lines = vm[word];
            if (!lines) {
                lines.reset(new std::set<line_no>);
            }
            lines->insert(n);
        }
    }
}

IDE: строка ошибки Visual Studio 2019:

while (std::getline(is, text)) {

IDE выводит список типов аргументов функции getline: "std :: ifstream, std :: string".так что это не согласуется с сигнатурой функции getline (string).но is параметр из функционального параметра, который имеет тип "std :: ifstream &".Я запутался здесь, почему IDE выводит его как "std :: ifstream" вместо "std :: ifstream &"?Кто-нибудь может дать некоторые мысли о том, как это исправить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...