将带有模板的构造函数实现与头文件分开

separating constructor implementation with template from header file

本文关键字:文件 实现 构造函数      更新时间:2023-10-16

可能的重复项:
为什么模板类的实现和声明应该在同一个头文件中?

我的头文件有

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

这工作正常。但是我需要将构造函数实现与头文件分开。

所以在 cpp 中,我有

template <typename T>
AA<T>::AA()
{ ... }
当我编译它

时,它编译了,但我得到未解决的外部符号错误。我在这里错过了什么?

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

template class AA<int>;

这将从模板生成定义,但仅当您知道类客户端将使用哪些类型时,它才有用

如果你把一个模板实现放到一个.cpp文件中,你需要确保它被实例化:编译器不会自动为你做。大约一天前回答了大致相同的问题:模板是否总是必须在标题中?