Désolé si c'est assez noobish, mais je suis assez nouveau en C ++. J'essaye d'ouvrir un fichier et de le lire en utilisant 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;
}
Cependant, j'obtiens l'erreur suivante que je ne sais pas trop comment résoudre:
variable 'std::ifstream ifs' has initializer but incomplete type
Réponses très appréciées. Notez que je n'ai jamais oublié de le faire #include <fstream>
, car beaucoup ont eu l'erreur en oubliant simplement d'inclure l'en-tête.
ÉDITER:
Il s'avère que j'ai en fait oublié d'inclure fstream
, mais j'avais oublié en raison du déplacement de la fonction vers un autre fichier.
<iostream>
. Seul<fstream>
fera l'affaire.Réponses:
Cela semble être répondu -
#include <fstream>
.Le message signifie: -
incomplete type
- la classe n'a pas été définie avec une classe complète. Le compilateur a vu des instructions telles queclass ifstream;
qui lui permettent de comprendre qu'une classe existe, mais ne sait pas combien de mémoire la classe prend.La déclaration forward permet au compilateur de donner plus de sens à: -
Il comprend que la classe existe et peut envoyer des pointeurs et des références via du code sans pouvoir créer la classe, voir les données de la classe ou appeler des méthodes de la classe.
Le
has initializer
semble un peu étranger, mais il dit que l'objet incomplet est en cours de création.la source
#include <fstream>
, non#include <ifstream>