c++ - C++ 抽象基类模板

标签 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;
}

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

最佳答案

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

关于c++ - C++ 抽象基类模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4751917/

相关文章:

c++ - 将 c++ 对象作为指针传递给 Rcpp 中另一个函数的重用

c++ - 转发 C++0x 中的所有构造函数

c++ - C++ 中的字符串文字的类型推导如何工作?

c++ - 检查重载成员函数是否存在的模板

java - 扩展应用程序的扩展抛出 InvocationTargetException

java - 德尔福: Constructing Abstract Class like Java

c++ - 如何在多重继承中使用抽象方法

如果成员存在,C++ 设置值

C++:默认参数和 vector

c++ - SFML2 应用程序找不到共享对象