我遇到以下问题:

我有一个模板为Test的类T。当我创建此类的对象(专门用于其他普通类)时,一切正常。在类Test的构造函数中,有一行代码创建了模板类的对象。

但是,当我尝试实例化此类(Test),并专门使用抽象类(SubDummy)的子类(Dummy)时,出现一个错误:无法实例化抽象类。

示例代码(简化为本文目的):

class Dummy
{
private:
    virtual void _nothing() = 0;    // this makes the class abstract
};

class SubDummy : public Dummy
{
public:
    SubDummy() :
        Dummy()
    {
    }
};

template <class T>
    class Test
{
public:
    Test()
    {
        T t;    // here the compiler reports the error
    }
};

int main()
{
    Test<SubDummy> x;
}

最佳答案

包含纯虚拟成员函数的类根本无法实例化。由于您没有在_nothing中指定SubDummy的替代,因此在该类中它也是纯虚拟的。您必须在_nothing中实现SubDummy才能使其起作用。

09-13 05:40