2013-02-26 15 views
89

Scusate se questo è abbastanza noobish, ma sono piuttosto nuovo di C++. Sto cercando di aprire un file e leggerlo con ifstream:C++: la variabile 'std :: ifstream ifs' ha l'inizializzatore ma il tipo è incompleto

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

Tuttavia, sto ottenendo il seguente errore io non sono molto sicuro come risolvere il problema:

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

risposte molto apprezzati . Si noti che non ho mai dimenticato di #include <fstream>, dal momento che molti hanno ricevuto l'errore a causa semplicemente dimenticando di includere l'intestazione.

EDIT:

scopre che in realtà ho fatto dimenticare di includere fstream, ma avevo dimenticato a causa di spostare la funzione di un altro file.

+7

Leggere la fine della domanda. ;) – beakr

+0

si dovrebbe 1) ans – Pubby

+6

Questa risposta mi ha aiutato. Nel mio caso, è stato perché ho rimosso un altro file di intestazione che includeva fstream. La soluzione doveva includere fstream. –

risposta

49

Sembra rispondere - #include <fstream>.

Il messaggio significa: -

incomplete type - la classe non è stata definita con una classe piena. Il compilatore ha visto affermazioni come class ifstream; che gli permettono di capire che esiste una classe, ma non sa quanta memoria occupa la classe.

La dichiarazione anticipata permette al compilatore di rendere più senso di: -

void BindInput(ifstream & inputChannel); 

Si capisce esiste la classe, e può inviare i puntatori e riferimenti attraverso codice senza essere in grado di creare la classe, visualizzare i dati all'interno la classe, o chiama qualsiasi metodo della classe.

Il has initializer sembra un po 'estraneo, ma sta dicendo che l'oggetto incompleto è stato creato.

+2

Sono sicuro che intendevate '#include ', non '#include ' –

Problemi correlati