Przepraszam, jeśli to dość nieładne, ale jestem całkiem nowy w C ++. Próbuję otworzyć plik i przeczytać go za pomocą 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;
}
Jednak pojawia się następujący błąd, nie jestem pewien, jak to naprawić:
variable 'std::ifstream ifs' has initializer but incomplete type
Odpowiedzi bardzo cenione. Zauważ, że nigdy nie zapomniałem o tym #include <fstream>
, ponieważ wiele osób otrzymało błąd, ponieważ po prostu zapomniałem dołączyć nagłówek.
EDYTOWAĆ:
Okazuje się, że właściwie zapomniałem o dołączeniu fstream
, ale zapomniałem o przeniesieniu funkcji do innego pliku.
c++
fstream
return-type
beakr
źródło
źródło
<iostream>
. Tylko się<fstream>
nada.Odpowiedzi:
Wydaje się, że odpowiedź -
#include <fstream>
.Wiadomość oznacza: -
incomplete type
- klasa nie została zdefiniowana z pełną klasą. Kompilator widział takie instrukcje,class ifstream;
które pozwalają mu zrozumieć, że klasa istnieje, ale nie wie, ile pamięci zajmuje ta klasa.Deklaracja forward umożliwia kompilatorowi zrozumienie: -
Rozumie, że klasa istnieje i może wysyłać wskaźniki i referencje za pośrednictwem kodu bez możliwości tworzenia klasy, przeglądania danych w klasie lub wywoływania metod tej klasy.
has initializer
Wydaje się nieco obce, ale mówi, że niekompletny obiekt jest tworzony.źródło
#include <fstream>
, że nie#include <ifstream>