2013-08-27 2 views
-1

У меня есть следующий класс.C++ Class Templates Inheritance Call Constructor/Destructor

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 Актеры :: DivideConquerTask :: DivideConquerTask (интермедиат, целый)

где Актёры этого пространства имен все объявляется/определен в.

Что здесь проблема? Почему он не может найти мой базовый конструктор/деструктор?

Примечание: Я опустил некоторые тривиальные функции, которые работают нормально.

+0

Извините. Не нашел дубликат. Спасибо, что направил меня! – UmaN

+0

Я не понимаю, почему люди сбиты без объяснений. Как я могу, возможно, улучшить будущие вопросы? – UmaN

ответ

0

В момент инстанцирования определение шаблона должно быть видимым.

Каноническое общее решение состоит в том, чтобы поместить ваши определения в заголовочные файлы.