請前輩指點一下include struct的方法 |
答題得分者是:richtop
|
achillean
一般會員 發表:16 回覆:23 積分:7 註冊:2004-08-13 發送簡訊給我 |
不太瞭解BCB的函示怎麼分別寫在不同的CPP檔裡然後include近來用
所以所有的函示都寫在同一個Unit1.cpp(爆!)
現在實在看不下去了,想要把函示拆開
原本
unit1.h宣告的
typedef struct A{ .. }A; typedef struct B{ A a; }B; B* readB(..); void somefun(B b);我想把readB和somefun這兩個function分別拉到Unit2,Unit3 我想struct A,B應該也放到Unit2比較好還是留在原本的Unit1? anyway我嘗試過多種排列組合 Unit2.h宣告了structA,B,readB的phototype Unit2.cpp定義structA,B,readB的內容 somefun還沒搬走情況 Unit1.h宣告了somefun的phototype以及include |
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 不太瞭解BCB的函示怎麼分別寫在不同的CPP檔裡然後include近來用 所以所有的函示都寫在同一個Unit1.cpp(爆!) 現在實在看不下去了,想要把函示拆開 原本 unit1.h宣告的achillean 你好: 善用本站的搜尋功能,請參考以下的連結文章 src="http://delphi.ktop.com.tw/loadfile.php?TOPICID=10003806&CC=223734"> -- Enjoy Researching & Developing --typedef struct A{ .. }A; typedef struct B{ A a; }B; B* readB(..); void somefun(B b);我想把readB和somefun這兩個function分別拉到Unit2,Unit3 我想struct A,B應該也放到Unit2比較好還是留在原本的Unit1? anyway我嘗試過多種排列組合 Unit2.h宣告了structA,B,readB的phototype Unit2.cpp定義structA,B,readB的內容 somefun還沒搬走情況 Unit1.h宣告了somefun的phototype以及include
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
achillean 您好: 理論上用include其實就是把該檔案的內容通通含括進來。而通常的習慣是把函式原型(prototype)宣告定義放在.h檔中,而實作或者說函式的內容則放在.c或.cpp中。
由於依您所提可能的組合有許多種,所以底下提供一個個人的經驗習慣供您參考: 1.建議將所有的typedef定義放在一起,
例如將下列自定型態存於"myHeader.h"中,
#ifndef MY_HEADER // 讓同一引用此檔案的程式中,下列定義只會出現一次 #define MY_HEADER typedef struct tagA{ .. } A; // 讓自定型態A與結構struc A能有所區分,建議改成struct tagA(其它名稱亦可) typedef struct tagB{ A a; }B; #endif2.接著不管函式要定義在哪個檔案中,只要先在檔案開始處引用"myHeader.h"即可, a) // unit2.cpp #include "myHeader.h" // .... B* readB(..); // unit3.cpp #include "myHeader.h" // .... void somefun(B b); b) // unit2.cpp #include "myHeader.h" // .... B* readB(..); void somefun(B b);使用時,要將自己定義的.h與所有的.c放在相同的目錄中,並且include時,.h檔前後要用雙引號(")括住。 |
renth555
一般會員 發表:32 回覆:65 積分:19 註冊:2003-02-17 發送簡訊給我 |
|
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
引言: 對不起發問一下 #ifndef MY_HEADER // 讓同一引用此檔案的程式中下列定義只會出現一次 #define MY_HEADER // 這兩句語法意思是甚麼小弟不了解 有時候您同時需要include很多檔案,也很有可能這些檔案彼此又有相互include的情形發生,因此,會發生重複定義的錯誤。 所以解決的辦法就是透過編譯指令#ifndef...#endif ,像這樣:先檢查 MY_HEADER (可以是其他的自定文字)是不是存在,如果不存在就定義MY_HEADER;如此一來,當其他有再include此檔時,因MY_HEADER已經存在,所以就不會再將.h的內容放進來,保持只有一份.h的內容,而不管您在同一個檔案中include它幾次。 typedef struct tagA{ ----> 跟取 struct tagA 這樣有何不同 .. } A; typedef可以讓您使用定義變數的方式去定義您的自定資料型態,也就是說您經由typedef定義的那個"變數",就成了一個新的自定資料型態,個人覺得typedef是個非常重要的自定型態使用方法。 試著看下述例子:(您應該可以知道您要的答案了) < class="code">void __fastcall TForm1::Button1Click(TObject *Sender) { int myData; typedef int myType; myType a, b; a=10; b=20; myData=30; } #endifRichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====##### 發表人 - richtop 於 2004/09/01 23:37:04 |
renth555
一般會員 發表:32 回覆:65 積分:19 註冊:2003-02-17 發送簡訊給我 |
|
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
renth555 您好:
引言: 小弟了解 typedef int myType; 自定義資料形態意思了 但我還是不太了解(小弟不才是否有更簡單範例解釋呢 感激教導) #ifndef MY_HEADER ----> ? #define MY_HEADER ----> ? ..... #endif您可以在BCB中開啟一個新的Application,並觀察Unit1.h,您將發現其前後也有類似宣告: //--------------------------------------------------------------------------- #ifndef Unit1H // --> 如果程式中之前都沒有定義(define)"Unit1H"的話,就將這行以下到#endif之前的內容複製進來。 #define Unit1H // --> 在此處定義(define)"Unit1H" ............ #endif // --> 表示上述的編譯判斷到此為止 如果您將上述三行註解掉,並且在Unit1.cpp中,故意再重複打一次#include "Unit1.h", ..... #include "Unit1.h" #include "Unit1.h" // 故意多打一次 ..... 接著執行此結果,您將得到重複宣告Form1的錯誤,原因是include會將指定要include進來的Unit1.h的內容複製一份進來,所以當您再include相同的東西時,其實就又再複製一份進來,因此就重複了。 但如果在include前,先判斷這個部分之前是否已include進來過了?如果是的話,也就是說已經定義了"UNIT1H",就跳過或者說不把Unit1.h的資料複製進來,因此避免了資料重複載入的問題。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |