我的用例是创建一个函数,该函数接受fileName,ifsttream / ofstream对象,然后打开该文件以在给定的filestream对象中进行相应的读取/写入。还检查操作是否成功,如果成功,则返回文件流对象。
我的实现如下,并且基于ifstream和ofstream都从fstream派生的假设。
#include <iostream>
#include <fstream>
using namespace std;
void populate_filehandles(const string &inFileName, fstream &filehandle) {
filehandle.open(inFileName);
if (!filehandle.is_open()) {
cout << "input file : " << inFileName << " could not be opened" << endl;
exit(0);
}
}
int main () {
ifstream inFile;
string inFileName = "abc.txt";
populate_filehandles(inFileName, inFile);
}
该代码给出了一个错误,ifstream无法转换为fstream。还有其他解决方法吗?
所以,正如其他人所建议的,这是由于std::ifstream
并非继承自std::fstream
。而是改为it inherits from std::istresm
。另一方面,std::istresm
。因此,您实际上无法做到这一点。
一些您必须解决的选项:
std::fstream
但是,这将要求您两次实现相同的功能。不一定是最好的主意,但会起作用。
[C0的有趣之处在于它具有打开文件进行读取或写入的能力(甚至我认为两者都可以)。因此,从理论上讲,您可以添加一个标志来说明要打开的方向:
std::iostream