用头文件中的模板分隔构造函数实现

时间:2011-12-29 23:43:02

标签: c++ templates

  

可能重复:
  Why should the implementation and the declaration of a template class be in the same header file?

我的头文件有

template <typename T>
class AA : public BB<T>
{
public:
    AA()
    { ... }

这很好用。但我需要将构造函数实现与头文件分开。

所以在cpp中,我有

template <typename T>
AA<T>::AA()
{ ... }

当我编译它时,它编译但我得到未解析的外部符号错误。我在这里缺少什么?

2 个答案:

答案 0 :(得分:5)

您可以使用以下方法在实现文件中显式实例化模板:

template class AA<int>;

这将从模板生成一个定义,但只有在您知道类客户端将使用哪种类型时才有用

答案 1 :(得分:2)

如果将模板实现放入.cpp文件中,则需要确保它实例化:编译器不会自动为您执行此操作。大约一天前回答了同样的问题:do template always have to be in the header?