我在运行程序时遇到错误,该程序演示了如何通过引用函数传递文件流对象。调用file.open(name,ios :: in)函数时程序失败:
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
//function prototypes
bool openFileIn(fstream &, string);
void showContents(fstream &);
int main(){
fstream dataFile;
if (openFileIn(dataFile, "demofile.txt"))
{
cout << "File opened successfully.\n";
cout << "Now reding data from the file. \n\n";
showContents(dataFile);
dataFile.close();
cout << "\nDone. \n";
}
else
cout <<"File open error! "<< endl;
return 0;
}
//******************************************************************
//Definition of function openFileIn. Accepts a reference to an
//fstream object as an argument. The file is opened for input.
//The function returns true upon success, false upon failure.
//******************************************************************
bool openFileIn(fstream& file, string name)
{
file.open(name, ios::in); //error occurs here
if (file.fail())
return false;
else
return true;
}
//*******************************************************************
//Defintion of function showContents. Accepts an fstream reference
//as its argument. Uses a loop to read each name from the file and
//displays it on the screen.
//*******************************************************************
void showContents(fstream &file)
{
string line;
while(file >> line)
{
cout << line << endl;
}
}
错误发生在&lt; openFileIn()&#39;功能。 &#39; file.open()&#39;调用失败并显示错误。 这是堆栈跟踪:
答案 0 :(得分:2)
open函数重载将std :: string作为参数is defined starting from C++11。
您可能正在使用旧的编译器,因此您需要使用const char *
使用旧的开放签名。
尝试:
file.open(name.c_str(), ios::in);
我在运行程序时遇到错误,该程序演示了文件的方式 流对象可以通过引用传递给函数。该程序 调用file.open(name,ios :: in)函数
时失败
请注意,您的程序根本没有编译。您在输出中看到的是编译错误,而不是堆栈跟踪。