C ++: la variabile 'std :: ifstream ifs' ha inizializzatore ma tipo incompleto


139

Scusate se questo è piuttosto noobish, ma sono abbastanza nuovo in C ++. Sto provando ad aprire un file e leggerlo usando ifstream:

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, visualizzo il seguente errore e non sono sicuro di come risolvere:

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

Risposte molto apprezzate. Si noti che non l'ho mai dimenticato #include <fstream>, poiché molti hanno ottenuto l'errore a causa del solo dimenticare di includere l'intestazione.

MODIFICARE:

Risulta che in realtà ho dimenticato di includere fstream, ma l'avevo dimenticato a causa dello spostamento della funzione in un altro file.


9
Leggi la fine della domanda. ;)
beakr,

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.
Andres Riofrio,

12
E non confondere con <iostream>. Lo <fstream>farà solo.
Joachim W

9
Questa domanda NON è troppo localizzata. Questo ha spiegato esattamente il problema che stavo avendo.
Syndog,

4
+1 per OP compresa la risposta. Mi ha aiutato quando ho unito il codice di un altro sviluppatore che è stato creato con un progetto non aggiornato e non mi è stato inviato per l'unione. Chiaramente non troppo localizzato o stretto.
Kenigmatic,

Risposte:


105

Questo sembra avere una risposta - #include <fstream>.

Il messaggio significa: -

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

La dichiarazione diretta consente al compilatore di dare più senso a:

void BindInput( ifstream & inputChannel ); 

Comprende che esiste la classe e può inviare puntatori e riferimenti attraverso il codice senza essere in grado di creare la classe, vedere qualsiasi dato all'interno della classe o chiamare alcun metodo della classe.

La has initializersembra un po 'estranea, ma sta dicendo che è stato creato l'oggetto incompleta.


7
Sono sicuro che volevi dire #include <fstream>, non#include <ifstream>
Alex Ryan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.