代码之家  ›  专栏  ›  技术社区  ›  CallMeNorm

ifstream::eof在if语句中时抛出类型错误

  •  1
  • CallMeNorm  · 技术社区  · 14 年前

    我有一个类a,它有一个std::ifstream filestr成员。在其中一个类函数中,我测试流是否已达到eof。

    class A
    {
    private:
       std::ifstream filestr;
    
    public:
       int CalcA(unsigned int *top);  
    }
    

    然后在cpp文件中

    int CalcA(unsigned int *top)
    {
       int error;
       while(true)
       {
          (this->filestr).read(buffer, bufLength);
    
          if((this->filestr).eof);
          {
             error = 1;
             break;
          }
       }
       return error;
    }
    

    我得到一个编译错误

    error: argument of type ‘bool (std::basic_ios<char>::)()const’ does not match ‘bool’
    

    有人能告诉我如何正确使用eof吗?或者我出现这个错误的其他原因?

    3 回复  |  直到 14 年前
        1
  •  6
  •   R. Martinho Fernandes    14 年前

    eof is a function ,因此它需要像其他函数一样调用: eof() 。

    也就是说,给定的阅读循环可以写 更正确 (考虑到除文件结尾以外的其他故障可能性)而不调用 eof() ,但是将读取操作转变为循环条件:

    while(filestr.read(buffer, bufLength)) {
        // I hope there's more to this :)
    };
    
        2
  •  1
  •   André Oriani    14 年前

    尝试

    if(this->filestr).eof())
    

    (this->filestr).eof 单独是指向成员方法的指针。 if 语句需要类型的表达式 bool 。所以您需要调用该方法。这将成功,因为它返回 布尔 价值

        3
  •  1
  •   obataku    14 年前

    (this->filestr).eof 未调用函数。 (this->filestr).eof() 是。:-)这解释了您的错误。