2013-02-26 7 views
89

Sorry, wenn das ziemlich noobish ist, aber ich bin ziemlich neu in C++. Ich versuche, eine Datei zu öffnen und lesen mit ifstream:C++: Variable 'std :: ifstream ifs' hat Initialisierer, aber unvollständiger Typ

vector<string> load_f(string file) { 
    vector<string> text; 

    ifstream ifs(file); 
    string buffer, str_line; 

    int brackets = 0; 
    str_line = ""; 

    while (getline(ifs, buffer)) { 
    buffer = Trim(buffer); 
    size_t s = buffer.find_first_of("()"); 

    if (s == string::npos) str_line += "" + buffer; 
    else { 
     while (s != string::npos) { 
     str_line += "" + buffer.substr(0, s + 1); 
     brackets += (buffer[s] == '(' ? 1 : -1); 

     if (brackets == 0) { 
      text.push_back(str_line); 
      str_line = ""; 
     } 

     buffer = buffer.substr(s + 1); 
     s = buffer.find_first_of("()"); 
     } 
    } 
    } 

    return text; 
} 

Allerdings bin ich die folgende Fehlermeldung bekomme ich bin mir nicht ganz sicher, wie zu beheben:

variable 'std::ifstream ifs' has initializer but incomplete type 

Antworten sehr geschätzt . Beachten Sie, dass ich nie auf #include <fstream> vergessen habe, da viele den Fehler bekommen haben, weil sie einfach vergessen haben, den Header einzuschließen.

EDIT:

Es stellte sich heraus, dass ich eigentlich fstream schließen vergessen, aber ich hatte aufgrund Bewegen der Funktion auf eine andere Datei vergessen.

+7

Lesen Sie das Ende der Frage. ;) – beakr

+0

sollte man entweder 1) ans – Pubby

+6

Diese Antwort hat mir geholfen. In meinem Fall war es, weil ich eine andere Header-Datei entfernte, die fstream miteinschloss. Lösung sollte fstream enthalten. –

Antwort

49

Dies scheint zu beantworten - #include <fstream>.

Die Nachricht bedeutet: -

incomplete type - die Klasse ist nicht mit einer vollständigen Klasse definiert. Der Compiler hat Anweisungen wie class ifstream; gesehen, die ihm erlauben zu verstehen, dass eine Klasse existiert, aber nicht weiß, wie viel Speicher die Klasse belegt.

Die Forward-Deklaration kann der Compiler mehr einen Sinn geben: -

void BindInput(ifstream & inputChannel); 

Es versteht die Klasse vorhanden ist, und kann Zeiger und Referenzen durch Code ohne die Möglichkeit zu schaffen, die Klasse finden Sie alle Daten innerhalb die Klasse oder rufen Sie alle Methoden der Klasse auf.

Die has initializer scheint ein wenig außerhalb, aber sagt, dass das unvollständige Objekt erstellt wird.

+2

Ich bin sicher, du meintest '#include ', nicht' #include ' –