C++:变量'std :: ifstream ifs'具有初始值但不完整的类型

bea*_*akr 126 c++ fstream return-type

对不起,如果这是非常noobish,但我是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;
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误,我不太确定如何修复:

variable 'std::ifstream ifs' has initializer but incomplete type
Run Code Online (Sandbox Code Playgroud)

答案非常感谢.请注意,我永远不会忘记#include <fstream>,因为许多人因忘记包含标题而得到错误.

编辑:

事实证明我确实忘记了包含fstream,但由于将该功能移动到另一个文件,我已经忘记了.

mks*_*eve 80

这似乎得到了回答 - #include <fstream>.

该消息意味着: -

incomplete type - 该类尚未定义为完整类.编译器已经看到了这样的语句,class ifstream;它允许它理解一个类存在,但不知道该类占用了多少内存.

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

void BindInput( ifstream & inputChannel ); 
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我相信你的意思是`#include <fstream>`,而不是`#include <ifstream>` (6认同)