• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 224  文章 - 41  trackbacks - 0
            <2015年11月>
            25262728293031
            1234567
            891011121314
            15161718192021
            22232425262728
            293012345

            享受編程

            常用鏈接

            留言簿(11)

            隨筆分類(159)

            隨筆檔案(224)

            文章分類(2)

            文章檔案(4)

            經典c++博客

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            原文:http://lnkm.2006.blog.163.com/blog/static/31474774200843181419322/

                  一直寫程序都不習慣使用類,有幾次使用類分離都出現連接錯誤,苦苦找不到原因,在Baidu海搜還是一無所獲,最近做數據結構實驗報告又碰到這個錯誤,搜了很久,并配合課本的例子,終于找到了錯誤的原因。

            1、當類模板的定義及實現分離(即寫在不同文件中)時,在其他文件中包含類模板的定義必須包含其類實現文件(即.cpp文件),而不能包含類定義文件(即.h文件),否則將收到“error LNK2001”錯誤。

            2、若是一般的類(即不是模板類),在其他文件包含則必須包含頭文件(即.h文件,類聲明文件),而不能包含源文件(即.cpp文件,類實現文件),否則將收到“error LNK2005”錯誤。

            如:

            ///test.h文件

            #ifndef HH

            #define HH

            class CTest

            {

            public:

            CTest();

            ~CTest();

            int get();

            void set(int d);

            private:

            int num;

            };

            #endif

            ///test.cpp文件

            #include"lll.h"

            CTest::CTest()

            {

            };

            CTest::~CTest()

            {

            };

            int CTest::get()

            {

            return num;

            }

            void CTest::set(int d)

            {

            num=d;

            }

            ///main文件

            #include"test.cpp"         //這里應該為#include"test.h"

            #include<iostream>

            using namespace std;

            int main()

            {

            CTest tt;

            int n;

            cin>>n;

            tt.set(n);

            cout<<tt.get()<<endl;

            return 0;

            }

            以上程序將收到如下錯誤:

            main.obj : error LNK2005: "public: __thiscall CTest::CTest(void)" (??0clll@@QAE@XZ) already defined in lll.obj

            main.obj : error LNK2005: "public: __thiscall CTest::~CTest(void)" (??1clll@@QAE@XZ) already defined in lll.obj

            main.obj : error LNK2005: "public: int __thiscall CTest::get(void)" (?get@clll@@QAEHXZ) already defined in lll.obj

            main.obj : error LNK2005: "public: void __thiscall CTest::set(int)" (?set@clll@@QAEXH@Z) already defined in lll.obj

            Debug/tt.exe : fatal error LNK1169: one or more multiply defined symbols found

            Error executing link.exe.

            又如:

            ///test文件:

            #ifndef HH

            #define HH

            template<class T>

            class CTest

            {

            public:

            CTest();

            ~CTest();

            T get();

            void set(T d);

            private:

            T num;

            };

            #endif

            ///test.cpp文件

            #include"test.h"

            template<class T>

            CTest<T>::CTest()

            {

            };

            template<class T>

            CTest<T>::~CTest()

            {

            };

            template<class T>

            T CTest<T>::get()

            {

            return num;

            }

            template<class T>

            void CTest<T>::set(T d)

            {

            num=d;

            }

            ///main文件:

            #include"test.h"         //這里應改為#include"test.cpp"

            #include<iostream>

            using namespace std;

            int main()

            {

            CTest<int> tt;

            int n;

            cin>>n;

            tt.set(n);

            cout<<tt.get()<<endl;

            return 0;

            }

            如上程序將收到如下錯誤:

            main.obj : error LNK2001: unresolved external symbol "public: __thiscall CTest<int>::~CTest<int>(void)" (??1?$clll@H@@QAE@XZ)

            main.obj : error LNK2001: unresolved external symbol "public: int __thiscall CTest<int>::get(void)" (?get@?$clll@H@@QAEHXZ)

            main.obj : error LNK2001: unresolved external symbol "public: void __thiscall CTest<int>::set(int)" (?set@?$clll@H@@QAEXH@Z)

            main.obj : error LNK2001: unresolved external symbol "public: __thiscall CTest<int>::CTest<int>(void)" (??0?$clll@H@@QAE@XZ)

            Debug/tt.exe : fatal error LNK1120: 4 unresolved externals

            Error executing link.exe.

            posted on 2008-11-20 16:34 漂漂 閱讀(1170) 評論(0)  編輯 收藏 引用 所屬分類: visual studio
            久久精品免费观看| 国产激情久久久久影院老熟女| 久久久亚洲精品蜜桃臀| 伊人情人综合成人久久网小说 | 久久福利青草精品资源站| 久久er热视频在这里精品| 精品久久久无码中文字幕| 久久福利资源国产精品999| 人妻精品久久久久中文字幕一冢本| 国产精品一久久香蕉产线看| 久久综合色区| 久久亚洲综合色一区二区三区| 色婷婷综合久久久久中文字幕 | 久久国产精品二国产精品| A级毛片无码久久精品免费| 久久亚洲国产精品一区二区| 一本久久a久久精品vr综合| 韩国三级中文字幕hd久久精品| 久久精品国产亚洲av高清漫画| 日批日出水久久亚洲精品tv| 久久综合丁香激情久久| 亚洲综合熟女久久久30p| 一本久道久久综合狠狠躁AV| 一本久久久久久久| 国产精品久久久天天影视| 亚洲中文久久精品无码| 99久久香蕉国产线看观香| 国产成人无码精品久久久久免费 | 久久综合一区二区无码| 久久九九亚洲精品| 99国产欧美久久久精品蜜芽 | 国产精品福利一区二区久久| 久久天天躁狠狠躁夜夜avapp| 色婷婷狠狠久久综合五月| 日批日出水久久亚洲精品tv| 国内精品久久久久久麻豆 | 久久精品国产亚洲沈樵| 97精品国产91久久久久久| 91精品国产乱码久久久久久 | 久久亚洲日韩精品一区二区三区| 无码精品久久久久久人妻中字|