【问题标题】:C++ Class Templates Inheritance Call Constructor/Destructor [duplicate]C ++类模板继承调用构造函数/析构函数[重复]
【发布时间】:2013-08-27 08:46:56
【问题描述】:

我有以下课程。

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 toActors::DivideConquerTask::DivideConquerTask(int, int) 的未定义引用

其中 Actors 是所有被声明/定义的命名空间。

这里有什么问题?为什么它找不到我的基本构造函数/析构函数?

注意:我省略了一些可以正常工作的琐碎功能。

【问题讨论】:

  • 对不起。没找到副本。谢谢你指导我!
  • 我不明白为什么人们在没有解释的情况下投反对票。那么我该如何改进未来的问题呢?

标签: c++ templates inheritance c++11 class-template


【解决方案1】:

在实例化点,模板定义必须是可见的。

规范的通用解决方案是将定义放在头文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-14
    • 2013-05-21
    • 2019-12-14
    • 2014-08-21
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多