我希望我的程序使用下面的函数“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:传递'bool readFile(std :: istream&amp;)
的参数1错误2:'std :: istream&amp;类型的引用的初始化无效来自'std :: string {aka std :: basic_string}
类型的表达式的{aka std :: basic_istream&amp;}'错误3:从'std :: istream {aka std :: basic_istream}'到'const char *'的无效用户定义转换[-fpermissive]
无论如何我可以解决它吗?该函数的参数实际上必须保持“std :: istream&amp; fileName”。
感谢您的帮助。
答案 0 :(得分:1)
您需要决定是要传递字符串还是文件名。如果传递一个字符串,那么调用者需要传递该字符串,并且需要编写该函数以期望文件名。
如果您决定传递一个流,则调用者需要打开并传递该流,并且需要编写该函数,期望它只使用它。
选项A:
#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
using namespace std;
bool readFile(std::string const &fileName);
int main(void)
{
string fileName;
cout << "Enter the file name: ";
cin >> fileName;
readFile(fileName);
}
bool readFile(std::string const &fileName)
{
ifstream file(fileName);
return true;
}
选项B:
#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
using namespace std;
bool readFile(std::istream& file);
int main(void)
{
string fileName;
cout << "Enter the file name: ";
cin >> fileName;
ifstream file(fileName);
readFile(file);
}
bool readFile(std::istream& fileName)
{
return true;
}
任何一个都可以工作 - 你只需要在调用者和被调用者之间保持一致。通过强烈的偏好,您希望在给定的代码库中尽可能保持一致。