C ++:变量“ std :: ifstream ifs”具有初始化程序,但类型不完整


139

很抱歉,如果这有点笨拙,但是我对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,但是由于将函数移到另一个文件而忘记了。


9
阅读问题的结尾。;)
beakr

6
这个答案帮助了我。就我而言,这是因为我删除了另一个包含fstream的头文件。解决方案是包括fstream。
2014年

12
并且不要与混淆<iostream>。只有<fstream>会做。
约阿希姆W

9
这个问题不是太本地化。这正好解释了我遇到的问题。
Syndog 2014年

4
为OP +1,包括答案。合并用过时的项目构建的其他开发人员代码时为我提供了帮助,但合并时没有发送给我。显然不要太局限或狭窄。
Kenigmatic

Answers:


105

这似乎可以回答- #include <fstream>

该消息表示:-

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

前向声明使编译器更容易理解:

void BindInput( ifstream & inputChannel ); 

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

has initializer似乎有点多余,但称正在创建完全的对象。


7
我相信您的意思是#include <fstream>,不是#include <ifstream>
Alex Ryan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.