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