#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, а не наследование. А еще лучше - не делать отдельного интерфейса для калькулятора. Почему калькулятор не может пользоваться открытыми методами?
Комментариев нет:
Отправить комментарий