如何在BCB下將一個大*.cpp檔分割為數個小*.cpp檔進行編譯? |
尚未結案
|
afatest
一般會員 發表:11 回覆:18 積分:5 註冊:2003-09-24 發送簡訊給我 |
|
anpino
版主 發表:31 回覆:477 積分:231 註冊:2003-01-02 發送簡訊給我 |
引言: 因為我的程式不斷的在擴充,為了便於管理與維護, 我想要將我的程式原始碼,分割為數個小的cpp檔來進行編譯, 故想請問各位先進與大大們 在BCB下分割程式原始碼(cpp檔)的正確方法 >>< face="Verdana, Arial, Helvetica"> afatest 您好: 將程式碼拆成數個cpp後, 記得在相關的cpp中將他們include即可。 舉例: 在Unit1.cpp中的幾個程式碼移到MouseEven.cpp,KeyEvent.cpp等等做分類後, 在Uint1.cpp的開頭#include "Unit1.h" // 記得寫在這行後面 #include "MouseEven.cpp" #include "KeyEven.cpp"也就是說, 從Unit1.h Form1 class的移出來cpp就#include在Unit1.h, 從其他Unit.h Form class的移出來cpp就#include在所屬Unit.h裡。 ------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖 |
afatest
一般會員 發表:11 回覆:18 積分:5 註冊:2003-09-24 發送簡訊給我 |
|
chtai
高階會員 發表:68 回覆:238 積分:116 註冊:2004-05-21 發送簡訊給我 |
引言: 1. 倘若"MouseEven.cpp"與"KeyEven.cpp"皆會用到 同一個函式時,該怎麼辦?我的程式就有這種問題, 拆開放到其中一個,會導致另一個無法使用;但若 兩邊同時皆定義時,會導致重複定義?對這樣的情形 有沒有較好的規劃方法來解決? 2. 若"MouseEven.cpp"與"KeyEven.cpp"皆include 相同的表頭檔,例如"jpeg.hpp",可以嗎? 3. 還有extern函式及extern變數在使用時,有特別 的使用時機或限制嗎?afatest兄您好: 我也只是個初學者,不過以下是我在需要您所說的這功能 卻又不知該怎麼做比較好的時候,會用的做法 anyway,它會work咩 :) 您的1.2.問題 我會把這些要用到相同表頭檔或同一函式的副函式,另外寫在一個cpp裡 或是MouseEvent.cpp include KeyEvent.cpp KeyEvent.cpp 再 include jpeg.cpp 這樣應該也可以解決問題。 (反正compiler看到include就只是把那檔案一字不漏的copy到當前檔案罷了) 至於3.問題 拍謝,小弟功力不夠,不敢亂答 ^^a -- 若有說錯的地方,還請各位前輩指正
------
My Web: http://nelson.csie.us My Blog: http://blog.nelson.csie.us |
anpino
版主 發表:31 回覆:477 積分:231 註冊:2003-01-02 發送簡訊給我 |
afatest您好:
引言: 1. 倘若"MouseEven.cpp"與"KeyEven.cpp"皆會用到 同一個函式時,該怎麼辦?我的程式就有這種問題, 拆開放到其中一個,會導致另一個無法使用;但若 兩邊同時皆定義時,會導致重複定義?對這樣的情形 有沒有較好的規劃方法來解決?您所謂的"倘若"MouseEven.cpp"與"KeyEven.cpp"皆會用到 同一個函式時",我並不清楚這個共用的函式是不是也一樣是 "MouseEven.cpp"與"KeyEven.cpp"的Unit的Form class的成員函式。 如果是相同的Form class的成員函式的話, 那麼 #include "Unit1.h" #include "MouseEven.cpp" #include "KeyEven.cpp" 是不會出現錯誤的。 如果是你自訂的函數, 那麼chtai所提供的是一個好方法, 您可以試試看。 其他方法是 1) 將這個函數宣告在 #include "MouseEven.cpp" #include "KeyEven.cpp" 之前。 2) 將含有此函數宣告的header (例如test.h)放在 #include "MouseEven.cpp" #include "KeyEven.cpp" 之前, 即 #include "Unit1.h" #include "test.h" #include "MouseEven.cpp" #include "KeyEven.cpp" 。 3) 在Uunt1.h裡#include "test.h" 。 在這裡說明一下include的觀念: 假設我們在一個cpp中#include "test.h", 編譯器在編譯時會將test.h內容複製到程式中#include "test.h" 的位置, 取代 #include "test.h" 這一串字。 (同理,所有的include xxx 都會用 xxx 檔的內容取代include xxx 這一串字。) 詳見chtai的精簡說明。 當><>< face="Verdana, Arial, Helvetica">引言: 2. 若"MouseEven.cpp"與"KeyEven.cpp"皆include 相同的表頭檔,例如"jpeg.hpp",可以嗎? 可以, 但是要注意, header(也就是.h檔)的開頭一定要加上 #ifndef TSETH(自訂名稱) #define TESTH(自訂名稱) 尾一定要加上 #endif BCB 的Unit的header你可以注意看,它都有加。 #ifndef,#endif是給編譯器看的, 也就是跟編譯器說在這個header定義過的就不必再定義一次, 這就是為什麼include相同的header, 但compiler時不會造成重複定義的原因。 (我承認這樣亂無章法的說明很差。) 詳見MSDN中#ifndef,#endif的說明。 引言: 3. 還有extern函式及extern變數在使用時,有特別 的使用時機或限制嗎?沒有。 但是必須注意, 由於extern 是表示使用同一個實體變數, 所以程式任何一部分都有可能會更改到這個值。 希望... 我這麼混亂的說明沒有照成您的困擾.... ------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖 |
afatest
一般會員 發表:11 回覆:18 積分:5 註冊:2003-09-24 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |