Ошибка при записи данных из файла в вектор класса

Всем добрый день! Во время написания кода возникла проблема с тем, что когда программа доходит до момента заполнения вектора данными из файла, вылетает ошибка, и программа прекращает работу.

Суть программы заключается в считывании двух матриц и их последующем перемножении. И если с записью матриц в файл и их перемножением вопросов нет, то вот со считыванием я зашёл в тупик.

По задумке, я собирался перегрузить оператор >>, после чего, так как у нас матрица, можно спокойно найти количество строк и колонок в файле, и затем использовать все известные нам данные и спокойно заполнить вектор, но как можно догадаться, всё пошло по одному месту.

Изначально я думал, что проблема может быть в том, что мы находимся в конце файла, и программа просто не знает, что записывать, но нет. Позже я подумал, что данные в файле хранятся в формате char, а я пытаюсь их записать в формате int, но и тут неудача.

В общем, я зашёл в тупик, поэтому хотел бы попросить помощи. Пример кода:

friend std::ifstream& operator >> (std::ifstream& is, Matrix& matrix)
{
    int row = 0, column = 0;
    std::string line;
    while (getline(is, line))
    {
        if (row == 0)
        {
            for (int i = 0; i < line.size(); i++)
            {
                if (line[i] != ' ')
                    column++;
            }
        }
        row++;
    }
    matrix.COLUMN = column;
    matrix.ROW = row - 1;
    is.seekg(0);
    for (int i = 0; i < matrix.ROW; i++)
    {
        matrix.MATRIX_VALUES.push_back(std::vector<int>());
        for (int j = 0; j < matrix.COLUMN; j++)
        {
            is >> matrix.MATRIX_VALUES[i][j];
        }
    }
    return is;
}

Ответы (1 шт):

Автор решения: Ka3yaJI

Проблему удалось решить при помощи библиотеки sstream — теперь можно записывать в матрицы не только цифры, но и числа, так как каждое значение в строке считывается до пробела:

int row = 0, column = 0;
std::string line;
while (getline(is, line))
{
    if (line == "")
        break;
    std::vector<int> data;
    std::stringstream sstream(line);
    while (sstream) {
        int value;
        sstream >> value;
        sstream.ignore(1);
        data.push_back(value);
    }
    if (row == 0)
    {
        for (int i = 0; i < line.size(); i++)
        {
            if (line[i] == ' ')
                column++;
        }
    }
    //std::cout << data[0] << "\n" << data[1] << "\n";
    row++;
    matrix.MATRIX_VALUES.push_back(data);
}
matrix.COLUMN = column + 1;
matrix.ROW = row;
return is;
→ Ссылка