функция с istream и параметром C ++

0

Я хотел бы, чтобы моя программа читала файл, используя функцию "readFile" ниже. Я пытаюсь выяснить, как вызвать функцию с параметром istream &. Цель этой функции - прочитать файл, получив имя файла в качестве параметра.

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

bool readFile(std::istream& fileName); //error 1 this line

int main(void)
{   
    string fileName;

    cout << "Enter the file name: ";
    cin >> fileName;

    readFile(fileName); //error 2 this line


}

bool readFile(std::istream& fileName)
{
    ifstream file(fileName, ios::in); //error 3 this line
    return true;
}

Три ошибки, которые я получаю:

ошибка 1: при передаче аргумента 1 из 'bool readFile (std :: istream &)

ошибка 2: неверная инициализация ссылки типа 'std :: istream & {aka std :: basic_istream &}' из выражения типа 'std :: string {aka std :: basic_string}

ошибка 3: неверное пользовательское преобразование из 'std :: istream {aka std :: basic_istream}' в 'const char *' [-fpermissive]

В любом случае, я могу это исправить? Параметр функции действительно должен оставаться "std :: istream & fileName".

Спасибо за помощь.

  • 3
    Вызывающая readFile здесь очень важна. std::istream& ли параметр std::istream& в уже открытый файл? Если так, то вам не нужно открывать его снова, я бы подумал.
  • 0
    Я просто пытаюсь построить код, не пытаясь заставить его работать с примером.
Теги:
function
ifstream

1 ответ

1

Первый аргумент конструктора std::ifstream должен быть строкой. Вы пытаетесь передать ему std::istream. Возможно, std::istream содержит имя файла, который вы хотите прочитать, и в этом случае вы хотите сначала извлечь имя в std::string. Что-то вроде этого может работать:

std::string fileName;
name >> fileName;
std::ifstream file(fileName, ios::in);
  • 0
    Спасибо Джозеф, это именно то, что я пытаюсь сделать, но, к сожалению, ваше предложение не работает.
  • 0
    @ Алекс Что с этим не работает? Вам необходимо объяснить, что именно передается функции в качестве аргумента name .
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню