Конструктор по умолчанию для унаследованного класса
Я уменьшил свою проблему до следующего примера кода:
class pokemon{
public:
pokemon(int n);
};
class MewTwo : public pokemon {
public:
MewTwo(int n);
};
MewTwo::MewTwo(int n) {}
Что вызывает ошибку:
нет соответствующей функции для вызова "Покемон:: покемон()
Что я думаю, так это то, что конструктор по умолчанию для pokemon вызывается, когда я пытаюсь написать конструктор MewTwo, которого не существует. Я относительно не знаком с С++, поэтому я просто угадываю здесь. Любые идеи?
Ограничение: исправления не могут изменять или добавлять публичных членов в классы.
Ответы
Ответ 1
Фактически то, что вы ищете, это список инициализации членов. Измените свой унаследованный класс-конструктор на следующее:
class MewTwo : public pokemon {
public:
MewTwo(int n) : pokemon(n) {}
};
Вы правильно определили, что происходит. В основном, когда вы создаете унаследованный класс, вы сначала создаете базовый класс, и вы не можете этого сделать, потому что не определено конструктор по умолчанию. Списки инициализации членов помогают вам обойти это:)
Отъезд: http://www.cprogramming.com/tutorial/initialization-lists-c++.html для получения дополнительных примеров!
Ответ 2
Попробуйте следующее:
class pokemon{
public:
pokemon(int n);
};
class MewTwo : public pokemon {
public:
MewTwo(int n) :pokemon(n){}
};