我遇到以下问题:
我有一个模板为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
才能使其起作用。