看板 C_and_CPP 關於我們 聯絡資訊
※ 引괊z《RaiGend0519 (鮮度減半,老了0.5歲囧)》之銘言: : 就像我現在設定一個在main.o: : struct pc { : int a; : int b; : }; : struct pc pcgame={1,2}; : struct pc2 { : int c; : int d; : }pcgame2; : 然後我在其他.o檔裡面有使用到: : if(pcgame.a > pcgame.b) : XXXXXXXX; : else : XXXXXXXX; : 或著 : pcgame2.c=((rand()%3)+1); : 這樣的時候 : 該怎麼作才能讓他們之間可以互相使用? : 因為我怎麼試他都說沒有定義 : 有人說用#define把struct跟創造的結構變數寫進去... : 可是這樣不是就不能更動了嗎= ="... : 我試著把struct做成.c檔 : 然後include近來 : 並在main.o設定全域變數 : 但是Dev c++說這樣是"muiltily define pcgame"... 之前我嘗試把程式碼分開寫的時候也碰過。 我試了很久之後用了下面的方法,但是我不知道一般怎麼處理 你可以寫一個global.h把所有共用的struct定義都寫在這裡, 有需要用到的再include此定義檔,然後真正宣告的實體變數, 也多加一筆資料在這邊,只是要加上extern類似下面 =====================global.h================ #ifudef _GLOBAL_H_ #define _GLOBAL_H_ struct pc{ int a; int b; }; struct pc2{ int c; int d; }; extern struct pc pcgame; #endif ===================main.c===================== #include "global.h" void main() { struct pc pcgame = {1,2}; } ==================xxxx.c====================== #include "global.h" void aaa(void) { pcgame.a = 1; pcgame.b = 2; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.168.67.96
tsaiminghan:ps 有錯別找我啊,記得自己測測看 04/04 10:28
tsaiminghan:特別是main.c那邊,我編譯會過,所以那時忘了測看看 04/04 10:39
tsaiminghan:到底正不正確 04/04 10:39
tsaiminghan:因為我不確定 extern xxx a; 和 實體宣告放一起會不會 04/04 10:43
tsaiminghan:出問題 04/04 10:43
※ 編輯: tsaiminghan 來自: 218.168.67.96 (04/04 11:38)
tsaiminghan:改一下xxxx.c 04/04 11:38
littleshan: 1. 你有宣告但沒定義 04/04 14:27
littleshan: 2. main.c 裡面實際上會多宣告一個 pcgame 區域變數 04/04 14:28
tsaiminghan:對,要宣告在全域才會...我弄錯了 04/04 14:29
tsaiminghan:宣告成區域變數,其他人會讀不到。 04/04 14:30
tsaiminghan:多謝指正。 04/04 14:30