-1

私は次のクラスを持っています。

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 は、すべてが宣言/定義されている名前空間です。

ここで何が問題なのですか?ベース コンストラクタ/デストラクタが見つからないのはなぜですか?

注: 正常に動作しているいくつかの些細な機能は省略しています。

4

1 に答える 1

0

インスタンス化の時点で、テンプレート定義が表示されている必要があります。

標準的で一般的な解決策は、定義をヘッダー ファイルに入れることです。

于 2013-08-27T09:03:04.393 に答える