我有一个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?或者我收到此错误的任何其他原因?
答案 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()
是。 :-)这解释了你的错误。