2017-09-16 83 views
1

類實例我有一個模板類中的main.cpp以下實例EXTERN與模板

template <class T> 
T mypair<T>::getmax() 
{ 
    T retval; 
    retval = a>b? a : b; 
    return retval; 
} 

mypair <int> myobject (100, 75); 

我希望有一個具有一個外部的這一類實例的頭文件,即「爲MyObject」 。

這是如何實現的?

我已經嘗試過:

* extern mypair<int> myobject; 
* extern template mypair<int> myobject; 
* extern template class mypair<int> myobject; 
+1

可能的重複[爲什麼模板只能在頭文件中實現?](https://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-文件) –

+3

您列出了「myobject」聲明的三個替代方案。他們中的哪一個你*嘗試*?他們哪個工作?哪些沒有?如果他們都沒有工作,你有什麼問題?請花一些時間[閱讀如何提出好問題](http://stackoverflow.com/help/how-to-ask),並學習如何創建[最小,完整和可驗證示例](http: //stackoverflow.com/help/mcve)。 –

+1

嗨,我嘗試了上面第一個爲myboject instantsiation,但問題是如何在頭文件中創建它的extern。 –

回答

0

您必須必須包含在extern聲明前的頭文件中定義的模板類。

如果你的編譯器遇到一個標題extern mypair<int> myobject;它不知道什麼樣的實體mypair是。你必須先定義它 - 通過包含包含模板類的頭文件。