C++ ifstream::eof在if语句中时引发类型错误
我有一个类a,它有一个std::ifstream filestr成员。在一个类函数中,我测试流是否达到eofC++ 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
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函数不同:它们的名称不会退化为指针。