Вызвано исключение: нарушение доступа для чтения?

Рейтинг: 0Ответов: 1Опубликовано: 26.05.2023
#pragma once
#include "Headers.h"

std::shared_ptr<BaseClass> getPtr(char c)
{
    if (c == 'W') return std::make_shared<W>();
    else if (c == 'P') return std::make_shared<P>();
}

class Class
{
public:
    Class() = default;
    ~Class() = default;

    void read(std::istream&);
    void print(std::ostream&);

    std::vector<std::shared_ptr<BaseClass>> ClassList;
private:
};

void Class::read(std::istream& in)
{
    while (!in.eof())
    {
        char c;
        in >> c;
        std::shared_ptr<BaseClass> ptr = getPtr(c);
        ptr->read(in);
        ClassList.push_back(ptr);
    }
}
void Class::print(std::ostream& out)
{
    std::ostream_iterator<std::shared_ptr<BaseClass>> _out(out);
    std::copy(TarifsList.begin(), TarifsList.end(), _out);
}

Ошибка на этапе выполнения, не могу найти решение.

Ответы

▲ 1Принят

while (!in.eof()) - ошибка, потому что EOF срабатывает только после неудачной попытки чтения за концом файла.

Правильно так:

char c;
while (in >> c) {...}

Еще, писать ~Class() = default; - вредно для здоровья, потому что ваш класс нельзя будет переместить, и вместо этого он будет всегда копироваться (если не предпринять каких-то специальных мер против этого).