Нет подходящей функции в множественном наследовании

Я новичок в наследовании в 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 ()

Я просто не могу понять, что не так.

1

Решение

sub_three(int a, int b, int c = 0) : base(a, b)
{
// do something
}

эквивалентно:

sub_three(int a, int b, int c = 0) : base(a, b), sub_one(), sub_two()
{
// do something
}

Поскольку таких конструкторов в sub_one а также sub_twoКомпилятор сообщает об ошибках. Вы можете добавить конструкторы по умолчанию в sub_one а также sub_two убрать ошибки.

2

Другие решения

sub_three конструктор инициализирует baseи вызвать конструктор по умолчанию sub_one а также sub_two который не существует, вам может понадобиться

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), sub_one(a,b), sub_two(a,b,c), flag(false)
{
// do something
}
};
1

По вопросам рекламы [email protected]