Я хотел бы, чтобы моя программа читала файл, используя функцию "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".
Спасибо за помощь.
Первый аргумент конструктора std::ifstream
должен быть строкой. Вы пытаетесь передать ему std::istream
. Возможно, std::istream
содержит имя файла, который вы хотите прочитать, и в этом случае вы хотите сначала извлечь имя в std::string
. Что-то вроде этого может работать:
std::string fileName;
name >> fileName;
std::ifstream file(fileName, ios::in);
name
.
readFile
здесь очень важна.std::istream&
ли параметрstd::istream&
в уже открытый файл? Если так, то вам не нужно открывать его снова, я бы подумал.