层次结构中 类 的编译器错误

Compiler Error for classes in hierarchy

我有以下代码

class interfaceBase // abstract class
{
public:
    virtual void vf1() = 0;
};

class tempBase : public interfaceBase  // manages a resource
{
    tempBase(int a) { var = new int[a]; }
    ~tempBase(){ free(var); }
private:
    int* var;
};

class derived : public tempBase // class I intend to instantiate.
{
public:
    derived(int rhs){ tempBase(var); } // ERROR - Pasted below
    void vf1() override final {}
};

int main()
{
    int a = 5;
    derived d(a);
}

我有一个资源需要管理,我创建了一个名为 tempBase 的单独 class,其工作是管理该资源。但是,这给我留下了一个问题——我无法构造 derived 类型的对象,因为似乎没有办法将构造函数调用到 tempBase

我收到错误提示

error C2512: 'tempBase' : no appropriate default constructor available
error C2259: 'tempBase' : cannot instantiate abstract class

如何更改我的代码,以便我仍然可以让 tempBase 处理所有资源管理,并且还可以实例化 derived

您必须将其放入初始化列表中:

derived(int rhs) : tempBase(var) { } // No erroranymore - see below

关于您原始代码中的错误的一些补充说明:

  • 由于tempBase没有初始化器,编译器试图生成默认构造函数,以便在执行构造函数体之前构造所有成员变量。
  • tempBase(var)在正文中会创建一个额外的临时匿名对象classtempBase,但是这样直接实例化一个纯虚拟class是不允许的

构造派生对象的基础部分时需要使用

derived(vars) : base(vars) { constructor code here }