<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ù),深深地感覺到了這篇附筆中可能存在錯(cuò)誤,于是把最初遇到此問題時(shí)的環(huán)境再模擬了一下,現(xiàn)在可以確認(rèn)這篇附筆中的確存在問題,現(xiàn)在就修正一下,并對(duì)各位表示歉意.
    6月初的一個(gè)項(xiàng)目中需要寫一個(gè)高性能網(wǎng)絡(luò)服務(wù)端程序,在網(wǎng)上找到了一份很好的代碼(
    請(qǐng)參見),在使用過程中發(fā)現(xiàn)在多個(gè)cpp文件中引入這份代碼的h文件時(shí),會(huì)出現(xiàn)很多重復(fù)定義錯(cuò)誤,當(dāng)時(shí)很頭疼,沒能很好的解決問題.
    現(xiàn)總結(jié)一條:在使用類模板技術(shù)時(shí),可在.h中實(shí)現(xiàn),也可在.h和.cpp中分開實(shí)現(xiàn),若用.h實(shí)現(xiàn),不要在文件中加入非類模板代碼,可避免重寫定義錯(cuò)誤..
          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í)慣錯(cuò)誤用法
    // main.cpp
    #include "Tpl.h"

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

    build時(shí)出現(xiàn)link錯(cuò)誤
    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)
    這組錯(cuò)誤信息和project中不加入Tpl.cpp的錯(cuò)誤信息一樣,即沒有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í),不能像使用普通類一樣只簡(jiǎn)單的包涵.h頭文件,應(yīng)該在使用模板類的cpp文件中引入模板類相應(yīng)的cpp文件
    2.將模板類的聲明與實(shí)現(xiàn)都放在.h中(在多個(gè)cpp中使用不同模板參數(shù)時(shí)可能會(huì)引起重復(fù)定義的編譯錯(cuò)誤)

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


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


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

    導(dǎo)航

    統(tǒng)計(jì)

    公告

    你好!

    常用鏈接

    留言簿(2)

    隨筆檔案

    文章分類

    文章檔案

    新聞檔案

    相冊(cè)

    收藏夾

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

    友情鏈接

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 日本免费福利视频| 一级做a爱过程免费视| 一个人免费视频在线观看www | 美女黄频视频大全免费的| 97热久久免费频精品99| 亚洲国产美女精品久久久久| a拍拍男女免费看全片| 91亚洲视频在线观看| 国产h视频在线观看网站免费| 亚洲精品成人久久| 皇色在线视频免费网站| 亚洲国产最大av| 在线看片免费不卡人成视频| 亚洲日韩久久综合中文字幕| 天天操夜夜操免费视频| 久久精品亚洲日本波多野结衣 | 亚洲精品无码成人片久久| 中文字幕乱码系列免费| 久久精品国产精品亚洲蜜月 | 91视频免费网址| 亚洲成a人片在线观看播放| 特级做A爰片毛片免费69 | 亚洲综合色成在线播放| a在线视频免费观看| 亚洲最新在线视频| 精品国产麻豆免费网站| 成在线人直播免费视频| 亚洲va在线va天堂va不卡下载 | 一级美国片免费看| 亚洲午夜精品一区二区| 在线观看免费高清视频| 亚洲欧美国产精品专区久久| 久久夜色精品国产亚洲av | 日韩精品视频免费观看| 一二三四在线观看免费中文在线观看| 久久久亚洲精品蜜桃臀| 无码免费午夜福利片在线| 免费无码又爽又黄又刺激网站| 亚洲精品国产精品乱码视色 | 国产亚洲情侣一区二区无码AV | 国产乱色精品成人免费视频|