ifstream :: eof выдает ошибку типа, когда в операторе if

У меня есть класс 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? Или какие-либо другие причины, почему я получаю эту ошибку?

1

Решение

eof это функция, поэтому он должен вызываться как другие функции: eof(),

Тем не менее, цикл чтения может быть записан правильнее (принимая во внимание другие возможности для отказа, кроме конца файла) без вызова eof(), но переводя операцию чтения в состояние цикла:

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

Другие решения

Пытаться

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

(this->filestr).eof только указатель на метод-член. if операторы требуют выражений типа bool, Так что вам нужно вызвать метод. Это удастся, потому что он возвращает bool значение.

1

(this->filestr).eof не вызывает функцию. (this->filestr).eof() является. 🙂 Это объясняет вашу ошибку.

1
По вопросам рекламы [email protected]