Страницы

Поиск по вопросам

понедельник, 9 марта 2020 г.

Нет подходящего конструктора по умолчанию

#cpp


Есть два класса, о дин наследует другой, тип наследования public.
    При компиляции выдает следующую ошибку: Нет подходящего конструктора по умолчанию.
Подскажите в чем проблема, два заголовочных файла ниже.

Integer.h

    class Integer {
private:
    int *_mass;
    int _system;
    int _size;
public:
    Integer(const int *mass, const int system, const int size);
    Integer(const Integer &);
    ~Integer() {
        delete[] _mass;
        _mass = nullptr;
    }
    Integer & operator=(const Integer &);


IntegerCalc.h

class IntegerCalc: public Integer {
private:
    Integer _a;
    Integer _b;
public:
    IntegerCalc(Integer &a, Integer &b) :
        _a(a), _b(b) {}; // ВОТ ТУТ ВЫДАЁТ ОШИБКУ
    ~IntegerCalc() {};

    


Ответы

Ответ 1



Ваш класс IntegerCalc наследуется от Integer - а значит, любой конструктор IntegerCalc должен вызывать конструктор Integer. Не конструктор поля, которые вы вызываете - а конструктор базового класса. Поскольку вы его не вызываете - компилятор автоматически добавляет вызов конструктора по умолчанию. Получается как-то так: public: IntegerCalc(Integer &a, Integer &b) : Integer(), _a(a), _b(b) {}; Но конструктора по умолчанию в базовом классе-то и нет! Отсюда и ошибка. Как такую ошибку исправить - зависит от задачи. Я не очень хорошо понимаю что вы хотели своим кодом сделать. UPD Подкласс калькулятор наследует класс чисел для того, чтобы иметь возможность использовать операторы и методы. Так делать не следует. Для того, чтобы "использовать операторы и методы", надо использовать простой friend, а не наследование. А еще лучше - не делать отдельного интерфейса для калькулятора. Почему калькулятор не может пользоваться открытыми методами?

Комментариев нет:

Отправить комментарий