变量‘ std: : ifstream ifs’有初始值设定项,但类型不完整

对不起,如果这是相当菜鸟,但我是相当新的 C + + 。我正在尝试打开一个文件,并使用 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;
}

然而,我得到了下面的错误,我不太确定如何修复:

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

非常感谢你的回答。请注意,我从来没有忘记 #include <fstream>,因为许多人得到的错误,由于只是忘记包括标题。

编辑:

事实上,我确实忘记了包含 fstream,但是由于将函数移动到另一个文件而忘记了。

179755 次浏览

这个问题似乎得到了解答—— #include <fstream>

信息的意思是:-

incomplete type-该类尚未用完整的类定义。编译器已经看到了诸如 class ifstream;之类的语句,这些语句允许它理解类的存在,但是不知道类占用了多少内存。

前向声明允许编译器更好地理解:-

void BindInput( ifstream & inputChannel );

它理解类的存在,可以通过代码发送指针和引用,而无需创建类、查看类中的任何数据或调用类的任何方法。

has initializer似乎有点无关紧要,但它表示正在创建不完整的对象。