Конструктор по умолчанию для унаследованного класса - PullRequest
11 голосов
/ 04 декабря 2010

Я сократил свою проблему до следующего примера кода:

class pokemon{
    public:
        pokemon(int n);
};

class MewTwo : public pokemon {
    public:
        MewTwo(int n);
};

MewTwo::MewTwo(int n) {}

, который выдает ошибку:

нет соответствующей функции для вызова "Покемон :: покемон ()

Я думаю, что происходит из-за того, что по умолчанию вызывается pokemon, когда я пытаюсь написать конструктор MewTwo, которого не существует. Я относительно новичок в C ++, поэтому я просто догадываюсь здесь. Есть идеи?

Ограничение: исправления не могут изменять или добавлять открытые члены к классам.

Ответы [ 2 ]

13 голосов
/ 04 декабря 2010

На самом деле вы ищете список инициализации члена. Измените свой унаследованный конструктор класса следующим образом:

class MewTwo : public pokemon {
    public:
        MewTwo(int n) : pokemon(n) {}
};

Вы правильно определили, что происходит. По сути, когда вы создаете унаследованный класс, вы сначала создаете базовый класс, и вы не можете этого сделать, поскольку не определен конструктор по умолчанию. Списки инициализации членов помогут вам обойти это:)

Проверьте: http://www.cprogramming.com/tutorial/initialization-lists-c++.html для большего количества примеров!

6 голосов
/ 04 декабря 2010

Попробуйте это:

class pokemon{
    public:
        pokemon(int n);
};

class MewTwo : public pokemon {
    public:
        MewTwo(int n) :pokemon(n){}
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...