【问题标题】:C++: variable 'std::ifstream ifs' has initializer but incomplete typeC ++:变量'std :: ifstream ifs'具有初始化程序但类型不完整
【发布时间】:2013-02-11 09:06:26
【问题描述】:

对不起,如果这很无聊,但我对 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 &lt;fstream&gt;,因为很多人都因为忘记包含标题而收到错误。

编辑:

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

【问题讨论】:

  • 阅读问题的结尾。 ;)
  • 这个答案对我有帮助。就我而言,这是因为我删除了另一个包含 fstream 的头文件。解决方案是包含 fstream。
  • 不要与&lt;iostream&gt; 混淆。只有&lt;fstream&gt; 可以。
  • 这个问题不是太本地化。这正好解释了我遇到的问题。
  • +1 用于 OP,包括答案。在合并另一个使用陈旧项目构建的开发人员代码时帮助我,包括未发送给我进行合并。显然不是太局限或太狭窄。

标签: c++ fstream return-type


【解决方案1】:

这似乎得到了回答 - #include &lt;fstream&gt;

消息的意思是:-

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

前向声明让编译器更能理解:-

void BindInput( ifstream & inputChannel ); 

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

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

【讨论】:

    猜你喜欢
    • 2012-04-03
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多