<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Hopes

    Start Here..

     

    在類模板的聲明和定義中把.h與.cpp分離

    在類模板的聲明和定義中把.h與.cpp分離
    看了幾位大嚇的回復(fù),深深地感覺到了這篇附筆中可能存在錯誤,于是把最初遇到此問題時(shí)的環(huán)境再模擬了一下,現(xiàn)在可以確認(rèn)這篇附筆中的確存在問題,現(xiàn)在就修正一下,并對各位表示歉意.
    6月初的一個項(xiàng)目中需要寫一個高性能網(wǎng)絡(luò)服務(wù)端程序,在網(wǎng)上找到了一份很好的代碼(
    請參見),在使用過程中發(fā)現(xiàn)在多個cpp文件中引入這份代碼的h文件時(shí),會出現(xiàn)很多重復(fù)定義錯誤,當(dāng)時(shí)很頭疼,沒能很好的解決問題.
    現(xiàn)總結(jié)一條:在使用類模板技術(shù)時(shí),可在.h中實(shí)現(xiàn),也可在.h和.cpp中分開實(shí)現(xiàn),若用.h實(shí)現(xiàn),不要在文件中加入非類模板代碼,可避免重寫定義錯誤..
          2009年7月25日23時(shí)58分58秒
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 原文如下:Posted on 2009-07-25 15:10 sToa
    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    1.聲明部分
    // Tpl.h
    #pragma once

    template<class T>
    class CTpl  
    {
    public:
        CTpl();
        virtual ~CTpl();

        void Test(T t);

    };

    2.實(shí)現(xiàn)部分
    // Tpl.cpp
    #include "Tpl.h"

    template<class T>
    CTpl<T>::CTpl()
    {

    }

    template<class T>
    CTpl<T>::~CTpl()
    {

    }

    template<class T>
    void CTpl<T>::Test(T t)
    {

    }
    3.習(xí)慣錯誤用法
    // main.cpp
    #include "Tpl.h"

    int main()
    {
        CTpl<char> ts;
        ts.Test(3);
        return 0;
    }

    build時(shí)出現(xiàn)link錯誤
    main.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall CTpl<char>::~CTpl<char>(void)" (??1?$CTpl@D@@UAE@XZ)
    main.obj : error LNK2001: unresolved external symbol "public: void __thiscall CTpl<char>::Test(char)" (?Test@?$CTpl@D@@QAEXD@Z)
    main.obj : error LNK2001: unresolved external symbol "public: __thiscall CTpl<char>::CTpl<char>(void)" (??0?$CTpl@D@@QAE@XZ)
    這組錯誤信息和project中不加入Tpl.cpp的錯誤信息一樣,即沒有CTpl<char>的實(shí)現(xiàn)代碼
    我們把Tpl.cpp包涵到main.cpp中,問題解決
    4.正確用法

    // main.cpp
    #include "tpl.cpp"
    int main()
    {
        CTpl<char> ts;
        ts.Test(3);
        return 0;
    }

    5.總結(jié)
    1.在使用以.h,.cpp分離實(shí)現(xiàn)模板類時(shí),不能像使用普通類一樣只簡單的包涵.h頭文件,應(yīng)該在使用模板類的cpp文件中引入模板類相應(yīng)的cpp文件
    2.將模板類的聲明與實(shí)現(xiàn)都放在.h中(在多個cpp中使用不同模板參數(shù)時(shí)可能會引起重復(fù)定義的編譯錯誤)

    posted on 2013-09-07 22:42 ** 閱讀(203) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     

    導(dǎo)航

    統(tǒng)計(jì)

    公告

    你好!

    常用鏈接

    留言簿(2)

    隨筆檔案

    文章分類

    文章檔案

    新聞檔案

    相冊

    收藏夾

    C#學(xué)習(xí)

    友情鏈接

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久久免费精品re6| 中文日本免费高清| 免费精品国偷自产在线在线| 亚洲国产成人久久综合碰碰动漫3d | 波多野结衣中文一区二区免费| 亚洲另类无码专区丝袜| 日本特黄特色aa大片免费| 亚洲中文字幕无码久久2020 | 国产亚洲AV夜间福利香蕉149| 日本精品久久久久久久久免费| 亚洲av区一区二区三| 无码毛片一区二区三区视频免费播放| 亚洲av再在线观看| 国产做国产爱免费视频| 亚洲美女又黄又爽在线观看| 日本不卡免费新一区二区三区| 精品日韩亚洲AV无码一区二区三区| 5g影院5g天天爽永久免费影院| 亚洲国产综合人成综合网站00| 毛片免费观看网址| 暖暖免费中文在线日本| 国产AV无码专区亚洲AWWW| 18禁在线无遮挡免费观看网站| 亚洲日本香蕉视频观看视频| 毛片a级三毛片免费播放| 黄网站色视频免费观看45分钟| 国产成人亚洲精品狼色在线| 97av免费视频| 亚洲国产aⅴ成人精品无吗| 亚洲精品无码久久久久AV麻豆| 暖暖在线视频免费视频| 77777亚洲午夜久久多喷| 亚洲国产精品自产在线播放| 女人隐私秘视频黄www免费| 亚洲日本久久一区二区va| 青青青国产色视频在线观看国产亚洲欧洲国产综合 | 亚洲国产精品一区二区三区久久 | 亚洲国产精品尤物yw在线| 久久久久久久岛国免费播放| 精品国产成人亚洲午夜福利| 亚洲线精品一区二区三区影音先锋 |