2013-08-27 41 views
-1

我有以下類。C++類模板繼承調用構造器/析構器

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(IN​​T,INT)

其中演員被命名空間的一切聲明/定義。

這裏有什麼問題嗎?爲什麼它找不到我的基構造函數/析構函數?

注:我省略了一些微不足道的功能,工作正常。

+0

對不起。沒有找到重複。謝謝你指導我! – UmaN

+0

我不明白爲什麼人們沒有解釋就倒下了。那麼我怎樣才能改善未來的問題呢? – UmaN

回答

0

在實例化的時候,模板定義必須可見。

規範的通用解決方案是將您的定義放在頭文件中。