我有以下课程。
template <class T>
class DivideConquerTask {
public:
DivideConquerTask() = delete;
DivideConquerTask(int problemSize, int branchingSize);
virtual ~DivideConquerTask();
DivideConquerTask(const DivideConquerTask& other) = delete;
DivideConquerTask& operator=(const DivideConquerTask& rhs) = delete;
DivideConquerTask(DivideConquerTask&& other) = delete;
DivideConquerTask& operator=(DivideConquerTask&& rhs) = delete;
...
并在cpp文件中
template <class T>
DivideConquerTask<T>::DivideConquerTask(int problemSize, int branchingSize) :
_problemSize { problemSize }, _branchingSize { branchingSize } {
}
template <class T>
DivideConquerTask<T>::~DivideConquerTask() {
/* Currently no resources managed. */
}
然后我有一个班级:
class MergeSortTask final : public DivideConquerTask<int> {
public:
virtual ~MergeSortTask();
MergeSortTask(int data[], int problemSize, int branchingSize);
...
使用cpp文件
MergeSortTask::~MergeSortTask() {
}
MergeSortTask::MergeSortTask(int* data, int problemSize, int branchingSize) :
DivideConquerTask(problemSize, branchingSize), _data { data } {
}
从此我收到错误消息:
对Actors::DivideConquerTask<int>::~DivideConquerTask()
undefined reference to
Actors :: DivideConquerTask :: DivideConquerTask(int,int)的未定义引用
其中Actors是命名空间,声明/定义了所有内容。
这里有什么问题?为什么找不到我的基础构造函数/析构函数?
注意:我省略了一些工作正常的简单函数。
答案 0 :(得分:0)
在实例化时,模板定义必须是可见的。
规范的通用解决方案是将您的定义放在头文件中。