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

时间:2012-09-03 18:45:44

标签: c++ ifstream

我有一个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 个答案:

答案 0 :(得分:6)

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

也就是说,给出的读取循环可以更正确(考虑到除文件结尾之外的其他失败可能性),而无需调用eof(),但转向读操作进入循环条件:

while(filestr.read(buffer, bufLength)) {
    // I hope there's more to this :)
};

答案 1 :(得分:1)

尝试

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

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

答案 2 :(得分:1)

(this->filestr).eof没有调用该函数。 (this->filestr).eof()是。 :-)这解释了你的错误。