2017-05-04 9 views
0

Hier ist der Code, der den Fehler enthält, den ich nicht behoben werden kann. Mein Code, um eine Textdatei zu öffnen, scheint falsch zu sein, aber ich habe versucht zu sehen, was falsch ist, aber es nicht finden kann. Ich habe ähnliche Programme mit diesem Code, der funktioniert, aber dieser nicht.Fehler: Keine übereinstimmende Funktion für den Aufruf von ifstream :: open (string)

den Fehler: keine Anpassungsfunktion für Aufruf 'std :: basic_ifstream :: Open (std :: __ cxx11 :: string &)' FILE.open (Dateiname) < ---

#include <iostream> 
#include <fstream> 
#include <iomanip> 

using namespace std; 

#include "nameSort.h" 

size_t readNames(string filename, string surnames[], string firstnames[]) 
{ 
    //initialize size top 0 
    size_t SIZE = 0; 

    //open file for input 
    ifstream FILE; 
    FILE.open(filename);//(This is where the error is) 

    //check if file exists 
    if(!FILE) 
    { 
    cout << "Error! No such file!\n"; 
    return 0; 
    } 
    else 
    { 
     //read file data to arrays 
     while(!FILE.eof()) 
     { 
     FILE >> firstnames[SIZE] >> surnames[SIZE]; 
     SIZE++; 
     }//end while 
    }//end if 

    FILE.close(); 
    return size; 
} 
+1

kompilieren Sie mit mindestens C++ 11 aktiviert? –

+0

Es funktioniert, wenn ich den Namen der Textdatei anstelle der Variablen einfüge, weiß jemand, warum ich den Fehler mit Variable bekomme? –

+1

versuchen 'FILE.open (filename.c_str());', aber besser aktivieren C++ 11 – user463035818

Antwort

0

Die Überladung std::basic_ifstream::open(const std::string&) wurde in C++ 11 hinzugefügt. Es ist eines der nicht so netten Features von C++, dass viele Funktionen C-Strings als Argumente verwenden, während die Verwendung von std::string normalerweise bevorzugt wird. Dies wurde in C++ 11 für einige Funktionen durch Hinzufügen dieser Überladung behoben.

Sie haben wahrscheinlich nicht C++ 11 aktiviert. Nur eine weitere Eigenart ... obwohl C++ 11 schon seit einiger Zeit existiert, müssen Sie Ihren Compiler explizit dazu auffordern, ihn mit dem Flag -std=c++11 zu aktivieren.

Als Abhilfe können Sie

FILE.open(filename.c_str()); 

Und beachten Sie bitte verwenden Kleinvariablennamen zu verwenden. Alle Variablennamen in Großbuchstaben werden normalerweise nicht als gute Praxis angesehen.

Verwandte Themen