2016-04-26 22 views
0

Ich erhalte einen Fehler beim Ausführen eines Programms, das demonstriert, wie Datei-Stream-Objekte durch Verweis auf Funktionen übergeben werden können. Das Programm schlägt fehl, wenn ein Aufruf der file.open (Name, ios :: in) machen Funktion:Verweis auf ein fstream-Objekt, das einen Fehler erzeugt

#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; 
    } 

} 

Der Fehler tritt in der 'openFileIn()' Funktion. Der Aufruf 'file.open()' schlägt mit einem Fehler fehl. Hier ist die Stacktrace:

Stacktrace

+2

Das ist kein Stack-Trace; Dein Programm kompiliert nicht. Die Fehlermeldung sagt Ihnen genau, was das Problem ist. –

+0

probiere 'file.open (name.c_str(), ios :: in);' – SHR

Antwort

2

Die offene Funktion Überlastung unter std :: string als Parameter, is defined starting from C++11.

Wahrscheinlich verwenden Sie einen alten Compiler, daher müssen Sie die alte offene Signatur mit const char * verwenden.

Versuchen:

file.open(name.c_str(), ios::in); 

Ich erhalte eine Fehlermeldung, ein Programm ausgeführt wird, zeigt, wie Stream-Objekte-Datei kann unter Bezugnahme auf Funktionen übergeben werden. Das Programm schlägt fehl, wenn ein Aufruf der file.open (Name, ios :: in) machen Funktion

Beachten Sie, dass Ihr Programm nicht zu kompilieren. Was Sie in der Ausgabe sehen, ist ein Kompilierungsfehler, kein Stacktrace.

Verwandte Themen