關於C++模板的串連問題

來源:互聯網
上載者:User
好久沒寫模板了,這次做一項目,發現一處非常適合使用模板應用,於是寫了個模板類,大概類似於醬紫//標頭檔
template <class TElement>
class TTTextT  
{
protected:
    vector<TElement>    m_chVector;
public:
    int    Count();
}

//CPP檔案
#include "TTText.h"
template <class TElement>
int TTTextT<TElement>::Count()
{
    return m_chVector.size();
}

當然還有許多其他代碼啦,分成標頭檔和CPP檔案,初步編譯沒什麼問題。
可是在使用的時候,卻產生了串連問題,說什麼unresolved external symbol,函數找不到。忽然想起以前也碰到過類似問題,模板類的聲名和實現如果放在兩個檔案裡,就會發生這樣的狀況。當時沒時間多想,把所有實現挪到標頭檔裡就解決了。想看看人家的代碼,不管是STL,ATL,WTL,都是所有內容全放標頭檔的。暈了,最後還是把所有代碼挪到標頭檔,就OK了。
可是為什麼呢?查MSDN,查google,都沒有找到滿意的答案。只看到一篇,說模板編譯中不產生實際代碼,只有加模板參數使用時才產生代碼,因此如果分兩個檔案,串連時會出錯,云云。不是特別明白,結論似乎是使用模板就應該把所有實現放在標頭檔中。看看STL/ATL/WTL,似乎也是。但問題是:既然這樣,為什麼允許下面這樣的代碼呢

template <class TElement>
int TTTextT<TElement>::Count()
{
    return m_chVector.size();
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.