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

            求解:編譯順序問題


                環境: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;
            }



                編譯錯誤為:
            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 ==========

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

            int main()
            {
                return 0;
            }

                或者在classA.h中刪除對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,現在問題如下,若classA.h需要引用nameA.h時,該如何解決這個問題?

               classA.h如下所示時。
            #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) 評論(12)  編輯 收藏 引用 所屬分類: C++

            評論

            # re: 求解:編譯順序問題 2010-06-11 18:32 風吹云散盡

            呵呵 很簡單 代碼不能這么寫
            類的依賴關系不允許形成循環,放你這里就是兩個類不能互相都依賴對方。  回復  更多評論   

            # re: 求解:編譯順序問題[未登錄] 2010-06-11 19:02 codejie

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

            # re: 求解:編譯順序問題 2010-06-11 22:20 taowang

            只需要將 nameA.h 中的:

            #include "classA.h"

            替換為:

            class CA;

            即可。
              回復  更多評論   

            # re: 求解:編譯順序問題[未登錄] 2010-06-11 22:49 codejie

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

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

            不是合并成一個文件,而是你要拆成3個文件。  回復  更多評論   

            # re: 求解:編譯順序問題[未登錄] 2010-06-12 00:00 codejie

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

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

            @codejie
            文件多容易管,實在不行你用C#,人家沒有頭文件,聲明沒有順序,類庫還大,多爽  回復  更多評論   

            # re: 求解:編譯順序問題 2010-06-12 09:02 Kevin Lynx

            個人覺得這種情況,就設計感覺上來說就不好?;ハ囫詈稀尉瓦@個情況來看,可以把類型抽離到一個公共文件里。如果是對類本身的依賴,當然可以使用前置聲明。  回復  更多評論   

            # re: 求解:編譯順序問題 2010-06-12 09:36 codejie

            @陳梓瀚(vczh)
            在我看來文件超過15個就難管了,一般這時我就開始封裝庫了。。。
            C#就扯遠了,BASIC不更好,變量都可以不定義呢。。。咱們還是C++吧~  回復  更多評論   

            # re: 求解:編譯順序問題 2010-06-12 09:39 codejie

            @Kevin Lynx
            說的沒錯,變成這樣是有歷史原因的,寫著寫著就開始耦合了,都沒有注意到。。。目前做的修改就是在分離類型,只是有點亂,一時還真不好下手,所以總想著有沒有偷懶的法子。。。(看來沒有了。。。)  回復  更多評論   

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

            @codejie
            幾百個文件上千個類我覺得都是正常的吧,功能一多代碼自然就要多了……畢竟文件那只是物理結構,跟代碼一點關系都沒有,何必在意。你是編程還是編文件啊……  回復  更多評論   

            # re: 求解:編譯順序問題 2010-06-12 16:25 codejie

            @陳梓瀚(vczh)
            說來慚愧,從來沒自己寫過一個超過100+個文件的工程,都很零散。。。  回復  更多評論   

            公告

            Using C++

            導航

            統計

            留言簿(73)

            隨筆分類(513)

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            香蕉久久影院| 91亚洲国产成人久久精品| 奇米影视7777久久精品人人爽| 色婷婷久久综合中文久久一本| 久久精品亚洲AV久久久无码| 久久久久久久亚洲Av无码| 国产福利电影一区二区三区久久老子无码午夜伦不 | 7777久久久国产精品消防器材| 久久精品人人做人人爽97| 久久有码中文字幕| 国内精品伊人久久久久AV影院| segui久久国产精品| 漂亮人妻被黑人久久精品| 亚洲国产成人乱码精品女人久久久不卡 | 久久综合狠狠综合久久激情 | 国产精品久久久久9999| 久久亚洲国产成人影院| 国产成人综合久久精品尤物| 日韩人妻无码一区二区三区久久| 国产成人综合久久精品尤物| 国内精品人妻无码久久久影院 | 国产高潮久久免费观看| 久久国产热精品波多野结衣AV| 污污内射久久一区二区欧美日韩| 曰曰摸天天摸人人看久久久| 久久人妻少妇嫩草AV无码专区| 久久久久久精品无码人妻| 亚洲性久久久影院| 久久伊人五月天论坛| 日韩中文久久| 色婷婷综合久久久久中文字幕| 久久久精品日本一区二区三区| 国产A级毛片久久久精品毛片| 精品久久一区二区| 久久线看观看精品香蕉国产| 成人久久精品一区二区三区| 97久久天天综合色天天综合色hd| 国产成人久久精品一区二区三区| 精品久久久久香蕉网| 久久久久久久99精品免费观看| 66精品综合久久久久久久|