C++ 继承构造函数并添加额外的

C++ 继承构造函数并添加额外的,c++,inheritance,constructor,C++,Inheritance,Constructor,我有一个保护程序类(从QObject派生)和一个从这个保护程序类(Creator)派生的保护程序类。在Saver类中,我定义了一些在初始化Creator类时要使用的构造函数。但我在Creator类中还有其他构造函数。我使用: Saver::Saver 在Creator类中继承构造函数,它运行良好,除非添加其他构造函数。 以下是类的标题: class Saver : public QObject { Q_OBJECT public: explicit Saver(); e

我有一个保护程序类(从QObject派生)和一个从这个保护程序类(Creator)派生的保护程序类。在Saver类中,我定义了一些在初始化Creator类时要使用的构造函数。但我在Creator类中还有其他构造函数。我使用:

Saver::Saver
在Creator类中继承构造函数,它运行良好,除非添加其他构造函数。 以下是类的标题:

class Saver : public QObject
{
    Q_OBJECT
public:
    explicit Saver();
    explicit Saver(QVector<QOpenGLVertexArrayObject *> vaos);
    explicit Saver(QVector<QOpenGLTexture *> textures);
};


class Creator : public Saver
{
    Q_OBJECT
public:
    using Saver::Saver;
    //Works well unless I add the following two lines
    Creator(QVector<Creator *> creators);
    Creator(Creator *creator);
};
类保护程序:公共QObject
{
Q_对象
公众:
显式Saver();
显式保存器(qvectorvaos);
显式保护程序(QVector纹理);
};
类创建者:公共保存程序
{
Q_对象
公众:
使用Saver::Saver;
//除非我添加以下两行,否则效果很好
创造者(QVector创造者);
创造者(创造者*创造者);
};
我是否需要重新定义所有构造函数(比本例中的构造函数多得多),或者是否有其他解决方案?

下面是一个重复问题的解决方案

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{});
};
解决此问题的一种方法是从基类的默认构造函数中删除
显式
限定符,并在派生类中添加默认构造函数的默认实现

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{});
};
解决此问题的另一种方法是在初始值设定项列表中使用显式基类的默认构造函数。您仍然需要在派生类中添加默认构造函数的默认实现

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{});
};

添加这两行之后会发生什么?它以什么方式停止工作?显示a,以及任何错误消息的完整文本。注意:如果不可能有一个不是多个内容的保存程序的
保存程序,例如
QOpenGLVertexArrayObject*
QOpenGLTexture*
,你应该考虑制作<代码> SAVER <代码>模板,并保存有大量不同的构造函数。如果没有看到编译器中的错误消息,我想在基类构造函数中使用<代码>显式< /代码>是罪魁祸首。尝试删除它们。使用C++标准和编译器版本,如果我没有错,继承构造函数在C++之前是不可用的。11@user4581301我的问题不是如何实现Saver类,而不是为什么在我添加其他构造函数时构造函数不会被继承,以及如何在将来避免这种情况。修复了这个问题。是什么导致了这个问题?