Итак, у меня довольно сложная программа, в которую я не хочу сейчас углубляться.Я включу игрушечный пример того же процесса, а затем рассмотрю его более подробно.
В моей программе я сталкиваюсь с ошибкой constructor for 'Hunter' must explicitly initialize the base class 'WorldObject' which does not have a default constructor
с многоуровневым наследованием: WorldObject
-> Creature
-> Hunter
.
Чтобы воссоздать ту же структуру, я сделал следующее:
class Base
{
protected:
int a;
public:
Base(int a): a(a) { print("Base contructed"); }
~Base() { print("Base destroyed"); }
virtual void printData() = 0;
};
class Derived1 : public Base
{
protected:
int b;
public:
Derived1(int a, int b): b(b), Base(a) { print("Derived1 contructed"); }
~Derived1() { print("Derived1 destroyed"); }
};
class Derived2 : public Derived1
{
protected:
int c;
public:
Derived2(int a, int b, int c) : c(c), Derived1(a, b) { print("Derived2 contructed"); }
~Derived2() { print("Derived2 destroyed"); }
virtual void printData(){ //... }
};
Здесь конструктор класса Derived2 создал Derived1 через список инициализаторов, а это, в свою очередь, создает Base "косвенно".Это работает, как я ожидал.
Однако в моем сложном коде класс Hunter должен явно вызывать конструктор WorldObject.Это выглядит следующим образом:
Hunter(sf::Texture &texture, float x, float y, sf::Font& font) :
WorldObject(texture,x, y, font),
Creature(texture, x, y, font)
{ //... }
Здесь конструктор Creature просто передает каждый аргумент в конструктор WorldObject.У WorldObject есть только этот конструктор:
WorldObject(sf::Texture& texture, float x, float y, sf::Font& font) : m_sprite(texture)
{ //... }
, а используемый конструктор Creature выглядит следующим образом:
Creature(sf::Texture &texture, float x, float y, sf::Font& font) :
WorldObject(texture, x, y, font),
NN(n_input_units, n_hidden_units, n_output_units)
{ //... }
Почему мне нужно инициализировать и WorldObject, и Creature непосредственно в моей Программе, но вНа игрушечном примере это работает без явного конструктора Base?
((Прекомпилятор также жалуется, что для WorldObject нет конструктора по умолчанию, и при компиляции появляется вышеуказанная ошибка))