У меня есть класс 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 включен)