Я новичок в наследовании на C++ и решил попробовать некоторые эксперименты, чтобы узнать об этой теме.Нет соответствующей функции в множественном наследовании
Приведенный ниже код показывает иерархию классов Я создаю:
classes.h
class base
{
protected:
int _a;
int _b;
int _c;;
base(int b, int c);
};
class sub_one : public virtual base
{
public:
sub_one(int a, int b) : base(a, b)
{
// do some other things here
}
// other members
};
class sub_two : public virtual base
{
protected:
int _d;
public:
sub_two(int a, int b, int c = 0) : base(a, b)
{
// do something
}
// other members
};
class sub_three : public sub_one, public sub_two
{
private:
bool flag;
public:
sub_three(int a, int b, int c = 0) : base(a, b)
{
// do something
}
};
classes.c
base::base(int a, int b)
{
// ...
}
Компилятор показывает мне сообщения:
нет подходящей функции для вызова sub_one :: sub_one()
нет функции согласования для вызова не sub_one :: sub_one()
никакой функции согласования для вызов sub_two :: sub_two()
никакой функции согласования для вызов sub_two :: sub_two()
Я просто не могу понять, что не так.
'sub_three' конструктор инициализирует' base', но забывает, чтобы инициализировать другие два его базовые классы. Ни под 'sub_one', ни' sub_two' не имеют конструкторов по умолчанию, поэтому вам нужно явно их перечислить в списке инициализаторов конструктора sub_three. –