引用创建错误的fstream对象

时间:2016-04-26 22:20:01

标签: c++

我在运行程序时遇到错误,该程序演示了如何通过引用函数传递文件流对象。调用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;调用失败并显示错误。 这是堆栈跟踪:

Stacktrace

1 个答案:

答案 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)函数

时失败

请注意,您的程序根本没有编译。您在输出中看到的是编译错误,而不是堆栈跟踪。