Вот пример Minimal, Complete и Verifiable , который дублирует проблему.
struct type_a {};
struct type_b {};
class Saver
{
public:
explicit Saver() {}
explicit Saver(type_a) {}
};
class Creator : public Saver
{
public:
using Saver::Saver;
Creator(type_b) {}
};
int main()
{
Creator c1;
Creator c2(type_a{});
Creator c3(type_b{});
};
Один из способов решения проблемы - удалить квалификатор explicit
из конструктора по умолчаниюбазового класса и добавьте реализацию по умолчанию конструктора по умолчанию в производный класс.
struct type_a {};
struct type_b {};
class Saver
{
public:
Saver() {}
explicit Saver(type_a) {}
};
class Creator : public Saver
{
public:
using Saver::Saver;
Creator() = default;
Creator(type_b) {}
};
int main()
{
Creator c1;
Creator c2(type_a{});
Creator c3(type_b{});
};
Другим способом решения проблемы может быть использование конструктора по умолчанию базового класса, явного в списке инициализатора.Вам все еще нужно добавить реализацию по умолчанию конструктора по умолчанию в производный класс.
struct type_a {};
struct type_b {};
class Saver
{
public:
explicit Saver() {}
explicit Saver(type_a) {}
};
class Creator : public Saver
{
public:
using Saver::Saver;
Creator() = default;
Creator(type_b) : Saver() {}
};
int main()
{
Creator c1;
Creator c2(type_a{});
Creator c3(type_b{});
};