<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)論排行榜

    主站蜘蛛池模板: 国产亚洲精品精品精品| 亚洲国产精品免费在线观看| 亚洲av无码专区国产不乱码| 在线观看免费无码专区| 国产午夜无码视频免费网站| 亚洲精品电影天堂网| 精品国产污污免费网站入口在线| 国产高清在线免费| 亚洲日韩AV一区二区三区中文| 免费观看男人吊女人视频| 亚洲精品无码永久在线观看你懂的| 国产AV无码专区亚洲AV麻豆丫 | www视频在线观看免费| 亚洲av无码无线在线观看| 亚洲va久久久噜噜噜久久天堂| 一道本不卡免费视频| 免费A级毛片无码A| 黄色一级视频免费| 国产在线19禁免费观看国产| 四虎国产成人永久精品免费| 午夜亚洲国产理论秋霞| 拍拍拍无挡视频免费观看1000 | 成人国产网站v片免费观看| 亚洲一区二区三区无码影院| 看免费毛片天天看| 亚洲国语在线视频手机在线| 无码精品A∨在线观看免费| 亚洲无人区视频大全| 亚洲成A人片在线观看无码3D| 日本特黄特色AAA大片免费| 亚洲中文无韩国r级电影| 久久久久久国产精品免费免费 | 亚洲精品蜜桃久久久久久| 日韩精品视频免费网址| 黄人成a动漫片免费网站| 国产成+人+综合+亚洲专| 成人黄页网站免费观看大全| 黄色免费网址在线观看| 国产精品亚洲精品| 亚洲精品免费视频| 一二三四免费观看在线视频中文版 |