Страницы

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

пятница, 31 мая 2019 г.

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

Есть два класса, о дин наследует другой, тип наследования 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() {};


Ответ

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

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

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