У меня есть класс A, который имеет член stst :: 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? Или какие-либо другие причины, почему я получаю эту ошибку?
eof
это функция, поэтому он должен вызываться как другие функции: eof()
,
Тем не менее, цикл чтения может быть записан правильнее (принимая во внимание другие возможности для отказа, кроме конца файла) без вызова eof()
, но переводя операцию чтения в состояние цикла:
while(filestr.read(buffer, bufLength)) {
// I hope there's more to this :)
};
Пытаться
if(this->filestr).eof())
(this->filestr).eof
только указатель на метод-член. if
операторы требуют выражений типа bool
, Так что вам нужно вызвать метод. Это удастся, потому что он возвращает bool
значение.
(this->filestr).eof
не вызывает функцию. (this->filestr).eof()
является. 🙂 Это объясняет вашу ошибку.