Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ &引用;凌驾;构造函数并调用祖辈构造函数_C++_Templates_Inheritance_Constructor - Fatal编程技术网

C++ &引用;凌驾;构造函数并调用祖辈构造函数

C++ &引用;凌驾;构造函数并调用祖辈构造函数,c++,templates,inheritance,constructor,C++,Templates,Inheritance,Constructor,我正在使用库中的一个类,我们称之为LibraryClass,其中LibraryClass继承自其模板,如下所示: template<class BaseClass> class LibraryClass : public BaseClass { ... 模板 班级图书馆班级 : 公共基类 { ... 这个类正是我想要的,但是构造函数中有一个bug。我正在尝试创建一个派生类,如下所示: template<class BaseClass> class MyClas

我正在使用库中的一个类,我们称之为
LibraryClass
,其中
LibraryClass
继承自其模板,如下所示:

template<class BaseClass>
class LibraryClass
:
    public BaseClass
{
...
模板
班级图书馆班级
:
公共基类
{
...
这个类正是我想要的,但是构造函数中有一个bug。我正在尝试创建一个派生类,如下所示:

template<class BaseClass>
class MyClass
:
    public LibraryClass<BaseClass>
{
...
模板
类MyClass
:
公共图书馆课
{
...
然后添加一个新的构造函数。但是,在构造函数MyClass()中,我需要调用构造函数BaseClass(),它不是直接的父级。如上所述,我不想调用LibraryClass(),因为它有一个bug


我应该如何用一个新的构造函数来创建这个新类?

我怀疑在一般情况下是否有符合标准的方法来绕过父构造函数(如果存在这样的东西,如何确保父-子对象处于可用状态?)

IMO修复此错误的最佳方法是更改
LibraryClass

如果你做不到这一点,你可以复制
LibraryClass
并修复副本中的错误。这有明显的、潜在的非常严重的缺点


另一种可能的替代方法是调用错误的构造函数,然后在
MyClass::MyClass
中修复对象以解决错误。这种方法可能适用于您的情况,也可能不适用于您的情况。

假设您可以绕过父对象的构造函数。如何确保父对象子对象处于可用状态(如果尚未初始化)?您可以尝试在
LibraryClass
中创建“绕过”构造函数,并强制调用它,即通过特定参数。这肯定是我多年来见过的最新颖的bug修复方法;-)如果不想调用构造函数,可以
malloc
原始类并用指针(或引用)指向它,但可能您必须自己构造对象。您正在调用
BaseClass::BaseClass
构造函数;它将作为
LibraryClass::LibraryClass
的先决条件的一部分被激发,这是您的先决条件。那么修复该错误如何?