• <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>

            Codejie's C++ Space

            Using C++

            求解:編譯順序問(wèn)題


                環(huán)境:VC Express 2008

                如下代碼,編譯失敗。

                classA.h

            #ifndef __CLASSA_H__
            #define __CLASSA_H__

            #include 
            <vector>

            #include 
            "nameA.h"

            class CA
            {
            public:
                typedef std::vector
            <int> TVector;
            public:
                CA() 
            {}
            }
            ;

            #endif


             nameA.h
            #ifndef __NAMEA_H__
            #define __NAMEA_H__

            #include 
            "classA.h"

            namespace NA
            {

            typedef 
            int INT;

            class CB
            {
            public:
                CB();
                
            void Func(CA::TVector& vct);
            }
            ;

            }


            #endif

            main.cpp
            #include "classA.h"
            #include 
            "nameA.h"

            int main()
            {
                
            return 0;
            }



                編譯錯(cuò)誤為:
            1>------ Build started: Project: namespace, Configuration: Debug Win32 ------
            1>Compiling
            1>main.cpp
            1>d:\temp\namespace\namea.h(15) : error C2653: 'CA' : is not a class or namespace name
            1>d:\temp\namespace\namea.h(15) : error C2061: syntax error : identifier 'TVector'
            1>Build log was saved at "file://d:\Temp\namespace\Debug\BuildLog.htm"
            1>namespace - 2 error(s), 0 warning(s)
            ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

               這個(gè)錯(cuò)誤是典型的引用順序引起的,修改main.cpp中的#include順序可以編譯成功。
            #include "nameA.h"
            #include "classA.h"

            int main()
            {
                return 0;
            }

                或者在classA.h中刪除對(duì)nameA.h的引用也可。
            #ifndef __CLASSA_H__
            #define __CLASSA_H__

            #include 
            <vector>

            //#include "nameA.h"

            class CA
            {
            public:
                typedef std::vector
            <int> TVector;
            public:
                CA() 
            {}
            }
            ;

            #endif


               OK,現(xiàn)在問(wèn)題如下,若classA.h需要引用nameA.h時(shí),該如何解決這個(gè)問(wèn)題?

               classA.h如下所示時(shí)。
            #ifndef __CLASSA_H__
            #define __CLASSA_H__

            #include 
            <vector>

            #include 
            "nameA.h"

            class CA
            {
            public:
                typedef std::vector
            <NA::INT> TVector;
            public:
                CA() 
            {}
            }
            ;

            #endif


            posted on 2010-06-11 17:03 codejie 閱讀(1916) 評(píng)論(12)  編輯 收藏 引用 所屬分類(lèi): C++

            評(píng)論

            # re: 求解:編譯順序問(wèn)題 2010-06-11 18:32 風(fēng)吹云散盡

            呵呵 很簡(jiǎn)單 代碼不能這么寫(xiě)
            類(lèi)的依賴(lài)關(guān)系不允許形成循環(huán),放你這里就是兩個(gè)類(lèi)不能互相都依賴(lài)對(duì)方。  回復(fù)  更多評(píng)論   

            # re: 求解:編譯順序問(wèn)題[未登錄](méi) 2010-06-11 19:02 codejie

            @風(fēng)吹云散盡
            是的,把CB類(lèi)去掉,只留下
            typedef int INT;
            void Func(CA::TVector& vt);
            這樣也不行,相對(duì)于空間概念來(lái)說(shuō)是namespace和class是一樣的。
            我現(xiàn)在想知道再不增加新文件的情況下,當(dāng)然了,也別合成一個(gè)文件,有解決辦法不?
              回復(fù)  更多評(píng)論   

            # re: 求解:編譯順序問(wèn)題 2010-06-11 22:20 taowang

            只需要將 nameA.h 中的:

            #include "classA.h"

            替換為:

            class CA;

            即可。
              回復(fù)  更多評(píng)論   

            # re: 求解:編譯順序問(wèn)題[未登錄](méi) 2010-06-11 22:49 codejie

            @taowang
            CA::TVector這個(gè)類(lèi)型怎么讓編譯器知道呢?
            這種前置方式一般只能用于nameA.h中CA的指針或引用實(shí)例。當(dāng)含有類(lèi)型時(shí),就不好用了~  回復(fù)  更多評(píng)論   

            # re: 求解:編譯順序問(wèn)題 2010-06-11 23:28 陳梓瀚(vczh)

            不是合并成一個(gè)文件,而是你要拆成3個(gè)文件。  回復(fù)  更多評(píng)論   

            # re: 求解:編譯順序問(wèn)題[未登錄](méi) 2010-06-12 00:00 codejie

            @陳梓瀚(vczh)
            嗯,我只是不想增加新文件。
            這里只是個(gè)例子,實(shí)際代碼太多,要移動(dòng)到新文件中,工作量太大了,所以想看看有沒(méi)有其它方法~  回復(fù)  更多評(píng)論   

            # re: 求解:編譯順序問(wèn)題 2010-06-12 02:08 陳梓瀚(vczh)

            @codejie
            文件多容易管,實(shí)在不行你用C#,人家沒(méi)有頭文件,聲明沒(méi)有順序,類(lèi)庫(kù)還大,多爽  回復(fù)  更多評(píng)論   

            # re: 求解:編譯順序問(wèn)題 2010-06-12 09:02 Kevin Lynx

            個(gè)人覺(jué)得這種情況,就設(shè)計(jì)感覺(jué)上來(lái)說(shuō)就不好。互相耦合。單就這個(gè)情況來(lái)看,可以把類(lèi)型抽離到一個(gè)公共文件里。如果是對(duì)類(lèi)本身的依賴(lài),當(dāng)然可以使用前置聲明。  回復(fù)  更多評(píng)論   

            # re: 求解:編譯順序問(wèn)題 2010-06-12 09:36 codejie

            @陳梓瀚(vczh)
            在我看來(lái)文件超過(guò)15個(gè)就難管了,一般這時(shí)我就開(kāi)始封裝庫(kù)了。。。
            C#就扯遠(yuǎn)了,BASIC不更好,變量都可以不定義呢。。。咱們還是C++吧~  回復(fù)  更多評(píng)論   

            # re: 求解:編譯順序問(wèn)題 2010-06-12 09:39 codejie

            @Kevin Lynx
            說(shuō)的沒(méi)錯(cuò),變成這樣是有歷史原因的,寫(xiě)著寫(xiě)著就開(kāi)始耦合了,都沒(méi)有注意到。。。目前做的修改就是在分離類(lèi)型,只是有點(diǎn)亂,一時(shí)還真不好下手,所以總想著有沒(méi)有偷懶的法子。。。(看來(lái)沒(méi)有了。。。)  回復(fù)  更多評(píng)論   

            # re: 求解:編譯順序問(wèn)題 2010-06-12 15:34 陳梓瀚(vczh)

            @codejie
            幾百個(gè)文件上千個(gè)類(lèi)我覺(jué)得都是正常的吧,功能一多代碼自然就要多了……畢竟文件那只是物理結(jié)構(gòu),跟代碼一點(diǎn)關(guān)系都沒(méi)有,何必在意。你是編程還是編文件啊……  回復(fù)  更多評(píng)論   

            # re: 求解:編譯順序問(wèn)題 2010-06-12 16:25 codejie

            @陳梓瀚(vczh)
            說(shuō)來(lái)慚愧,從來(lái)沒(méi)自己寫(xiě)過(guò)一個(gè)超過(guò)100+個(gè)文件的工程,都很零散。。。  回復(fù)  更多評(píng)論   

            公告

            Using C++

            導(dǎo)航

            統(tǒng)計(jì)

            留言簿(73)

            隨筆分類(lèi)(513)

            積分與排名

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            青青草国产精品久久| 精品久久久久久成人AV| 99久久国产综合精品五月天喷水| 伊人久久综合无码成人网| 亚洲精品无码久久久久去q| 久久婷婷五月综合成人D啪| 日韩精品久久久久久久电影| 九九精品久久久久久噜噜| 亚洲性久久久影院| 99精品国产综合久久久久五月天| 日韩精品无码久久一区二区三| 午夜精品久久久久9999高清| 久久精品国产亚洲αv忘忧草 | 国产精品亚洲美女久久久| 狠狠色丁香婷综合久久| 国产福利电影一区二区三区久久久久成人精品综合 | 91久久婷婷国产综合精品青草 | 久久免费大片| 亚洲中文字幕无码久久精品1| 九九精品99久久久香蕉| 国产伊人久久| 亚洲中文久久精品无码ww16| 伊人久久大香线蕉影院95| 久久热这里只有精品在线观看| av无码久久久久不卡免费网站 | 丁香五月网久久综合| 久久黄色视频| AAA级久久久精品无码片| 亚洲v国产v天堂a无码久久| 久久久久久国产精品免费无码| 久久AⅤ人妻少妇嫩草影院| 人妻无码αv中文字幕久久| 久久精品国产WWW456C0M| 久久Av无码精品人妻系列 | 亚洲日韩欧美一区久久久久我| 精品久久久久久| 五月丁香综合激情六月久久| 久久久久久久久久久免费精品| 久久国产亚洲高清观看| 超级碰碰碰碰97久久久久| 久久久久国产一区二区|