首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C++:变量'std::ifstream ifs‘具有初始值设定项,但类型不完整

C++:变量'std::ifstream ifs‘具有初始值设定项,但类型不完整
EN

Stack Overflow用户
提问于 2013-02-26 10:17:55
回答 1查看 158.9K关注 0票数 160

很抱歉,如果这太粗俗了,但我对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,但由于将函数移动到另一个文件中,我忘记了这一点。

EN

回答 1

Stack Overflow用户

发布于 2015-09-18 22:26:03

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

该讯息的意思是:

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

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

void BindInput( ifstream & inputChannel ); 

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

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

票数 133
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15080231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档