• <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
            <2009年3月>
            22232425262728
            1234567
            891011121314
            15161718192021
            22232425262728
            2930311234

            享受編程

            常用鏈接

            留言簿(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 漂漂 閱讀(1171) 評論(0)  編輯 收藏 引用 所屬分類: visual studio
            狠狠精品干练久久久无码中文字幕 | 久久人做人爽一区二区三区| 久久精品视频一| 国内精品九九久久久精品| Xx性欧美肥妇精品久久久久久| 亚洲国产婷婷香蕉久久久久久| 国内高清久久久久久| 精品久久久久久久久久中文字幕 | 日本精品久久久中文字幕| 亚洲国产综合久久天堂| 91精品国产综合久久久久久| 少妇无套内谢久久久久| 久久九九亚洲精品| 人妻久久久一区二区三区| 久久久久免费视频| 久久久久久久尹人综合网亚洲| 久久亚洲精品国产亚洲老地址| 国产成人AV综合久久| 国产精品久久久久…| 性欧美大战久久久久久久久| 亚洲国产高清精品线久久 | 国产精品99久久久久久宅男小说| 99久久中文字幕| 无码专区久久综合久中文字幕 | 国内精品久久久久久久久电影网| 久久国产综合精品五月天| 久久精品免费观看| 2021久久国自产拍精品| 久久99精品久久久久久动态图| 久久久久亚洲AV成人网人人网站 | 久久精品成人免费网站| 久久精品国产亚洲av影院| 男女久久久国产一区二区三区| 2021国内久久精品| 亚洲综合伊人久久综合| 久久无码AV一区二区三区| 亚洲综合久久久| 久久亚洲中文字幕精品有坂深雪 | 欧美久久一区二区三区| 少妇被又大又粗又爽毛片久久黑人 | 国产午夜久久影院|