Почему istream может читать файл, но не закрывать его? - PullRequest
1 голос
/ 16 июня 2020

У меня есть класс Matrix (определенный ниже), и в этом классе я перегружаю оператор >>. Сначала я сделал это, используя ifstream, который дал следующее: Класс:

class Matrix
{
private:
    int _rows{};
    int _cols{};
    float *_arrData{};
public:
    // Constructors

    Matrix(int rows, int cols);
    friend std::ifstream& operator>>(std::ifstream& s, const Matrix& mat);
}

Определение оператора >>:

std::ifstream &operator>>(std::ifstream &s, const Matrix &mat)
{
    s.read((char*)mat._arrData, sizeof(float) * mat._rows * mat._cols);
    if (!s)
    {
        std::cerr << FILE_ERR << std::endl;
        s.close();
        exit(ERROR);
    }
    return s;
}

Что работает отлично. Теперь, пытаясь использовать istream, я бы написал то же самое, но компилятор выдает мне ошибку, сообщающую мне, что istream не имеет члена с именем close. Зачем ? Почему я мог прочитать файл с помощью istream, но не смог его закрыть? Почему мы вообще позволяем такое действие? (Обратите внимание, что класс fstream включен)

...