1

我有一个具有 std::ifstream filestr 成员的 A 类。在其中一个类函数中,我测试了流是否已达到 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?或者我收到此错误的任何其他原因?

4

3 回答 3

6

eof是一个函数,所以它需要像其他函数一样调用eof()

也就是说,可以更正确地编写给定的读取循环(考虑到文件结尾以外的其他失败可能性),而无需调用eof(),而是将读取操作转换为循环条件:

while(filestr.read(buffer, bufLength)) {
    // I hope there's more to this :)
};
于 2012-09-03T18:46:54.817 回答
1

尝试

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

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

于 2012-09-03T18:47:22.860 回答
1

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

于 2012-09-03T18:49:12.220 回答