C++抽象基类模板

Woo*_*ody 2 c++ templates abstract-class

这段代码出了什么问题?

template <class T>
class A
{
private:
    T a;

public:
    A(): a(0) {}
    virtual ~ A() = 0;
};


template <class T>
class A;

template <class T>
class B : public A<T>
{
private :
    T b;

public:
    B() : A<T>() {}
    virtual ~B(){}


};


int _tmain(int argc, _TCHAR* argv[])
{
B <double> bb;
return 0;
}
Run Code Online (Sandbox Code Playgroud)

错误LNK2019:未解析的外部符号"public:virtual __thiscall A :: ~A(void)"(?? 1?$ A @ N @@ UAE @ XZ)在函数"public:virtual __thiscall B ::〜B"中引用(void )"(?? 1?$ B @ N @@ UAE @ XZ)

Dan*_*her 9

你将A析构函数声明为纯虚拟.这一切都很好,如果你想保证类从未实例化,可以认为是一种很好的做法.但是,您仍然必须A::~A()在代码中的某处定义,因为B析构函数会自动调用A::~A()B对象.由于您将其声明为纯虚拟,因此您无法像使用内联那样将其定义为内联~B; 你必须在类定义之外包含它的定义.