У меня есть небольшая проблема, когда, честно говоря, я полностью запутался с конструкторами производных классов и мне нужна помощь.
У меня есть базовый класс с параметризованным конструктором:
Element::Element(RandomNumber &rnd, Console &console)
: rnd(rnd), console(console)
и производный конструктор класса
Jetsam::Jetsam(RandomNumber rnd, Console console):Element(rnd,console)
По сути, я хочу передать параметры, которые используются в конструкторе базового класса, в конструктор производного класса. Я пробовал несколько разных способов, и в настоящее время я получаю сообщение об ошибке «no initializer for».
Есть ли у кого-нибудь помощь для меня или может помочь мне в понимании моей проблемы. Любая помощь приветствуется.
Спасибо за ваше время,
Алин.
редактировать :
IntelliSense: "Jetsam::Jetsam(RandomNumber rnd, Console console)" provides no initializer for: e:\c++\my game\my game\jetsam.cpp 7
редактировать:
Element::Element(RandomNumber &rnd, Console &console)
: rnd(rnd), console(console)
{
}
Jetsam::Jetsam(RandomNumber rnd, Console console):Element(rnd,console)
{
}
Jetsam::Jetsam(RandomNumber rnd, Console console): Element::Element(rnd,console);
Приведенный выше пример кода должен работать.
Ссылка на мой комментарий — если ваши переменные-члены объявлены как ссылки, вам нужно определить ваш производный конструктор следующим образом:
Jetsam::Jetsam(RandomNumber &rnd, Console &console):Element(rnd,console)
Например, следующий код компилируется нормально для меня:
// dummy classes for use as member variables
class RandomNumber{};
class Console{};
// base class
class Element
{
public:
Element(RandomNumber &rnd, Console &console) : rnd(rnd), console(console) {}
// member variables
RandomNumber& rnd;
Console& console;
};
// derived class
class Jetsam : public Element
{
public:
Jetsam(RandomNumber &rnd, Console &console) : Element(rnd, console) {}
};
Я предположил, что ваша декларация похожа на вышеприведенную. Можете ли вы отредактировать свой вопрос, если он значительно отличается?