C++ ifstream::eof在if语句中时引发类型错误

C++ ifstream::eof在if语句中时引发类型错误,c++,ifstream,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).r

我有一个类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’
错误:类型为'bool(std::basic_ios::)()const'的参数与'bool'不匹配
有人能告诉我如何正确使用eof吗?或者是由于其他原因导致出现此错误?

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

也就是说,在不调用
eof()
的情况下,可以更正确地写入给定的读取循环(考虑到文件结束以外的其他故障可能性),但将读取操作转换为循环条件:

while(filestr.read(buffer, bufLength)) {
    // I hope there's more to this :)
};
,因此需要像调用其他函数一样调用它:
eof()

也就是说,在不调用
eof()
的情况下,可以更正确地写入给定的读取循环(考虑到文件结束以外的其他故障可能性),但将读取操作转换为循环条件:

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

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

试试看


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

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

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

除了缺少括号外,请注意使用
eof()
仅用于确定读取操作失败的原因。作为循环控制条件使用是非常无用的。首先,
这个->
在它出现的两个地方不需要;这意味着您还可以删除括号。第二,正如其他人所提到的,
eof
是一个函数;你得叫它。但它并没有告诉你你已经到了文件的末尾;它告诉您试图读取文件的结尾。除了缺少括号外,请注意使用
eof()
仅用于确定读取操作失败的原因。作为循环控制条件使用是非常无用的。首先,
这个->
在它出现的两个地方不需要;这意味着您还可以删除括号。第二,正如其他人所提到的,
eof
是一个函数;你得叫它。但它并没有告诉你你已经到了文件的末尾;它告诉您您试图读取文件的末尾。
(this->filestr)。eof
不是指向成员函数的指针。如果是,代码就可以了,因为指向成员函数的指针可以在上下文中转换为
bool
。指向成员函数的指针的语法是
&ClassName::MemberFunctionName
。成员函数与C函数不同:它们的名称不会退化为指针。
(this->filestr)。eof
不是指向成员函数的指针。如果是,代码就可以了,因为指向成员函数的指针可以在上下文中转换为
bool
。指向成员函数的指针的语法是
&ClassName::MemberFunctionName
。成员函数与C函数不同:它们的名称不会退化为指针。