[問題]兩個 .h檔有名稱一樣的function該如何解決

看板C_and_CPP作者 (SaoAn)時間15年前 (2011/02/24 03:52), 編輯推噓4(4017)
留言21則, 7人參與, 最新討論串1/1
小弟遇到一個狀況 main.cpp中include了A.h和B.h,A.h和B.h中各有一個函式宣告 也就是void funcA(); void funcB(); A.cpp中include了C.h,B.cpp中include了D.h C.h中有好幾個函式宣告,D.h中有好幾個函式宣告,偏偏剛好有一個函式名稱剛好一樣 EX: C.h D.h #ifndef C_H #ifndef D_H #define C_H #define D_H void funcC1(); void funcD1(); void funcC2(); void funcD2(); void funcSame(); void funcSame(); #endif #endif 這樣compile不會過,我有想到一個方法,就是把funcSame獨立出來寫成funcSame.cpp 和funcSame.h,然後在由C和D去include,但是這樣感覺蠻不聰明的,而且.cpp檔和.h 檔的數目可能會氾濫成災...請問各位先進該如何解決呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 24.161.183.254

02/24 04:08, , 1F
補充一個 funcSame只有main.cpp不會用到, 因為A.cpp和
02/24 04:08, 1F

02/24 04:09, , 2F
B.cpp會用到,所以也不能把funcSame改成static...
02/24 04:09, 2F

02/24 05:16, , 3F
.h 全加上 namespace 如何?
02/24 05:16, 3F

02/24 05:18, , 4F
既然都要改了,為何不把 func name 改過再改其它的?
02/24 05:18, 4F

02/24 06:44, , 5F
把 void funcSame(); 移到 A.cpp 和 B.cpp 裡如何?
02/24 06:44, 5F

02/24 06:44, , 6F
因為 main.cpp 不用所以就別讓它看到就好了...
02/24 06:44, 6F

02/24 06:45, , 7F
實作不要動 只要把宣告移過去就好
02/24 06:45, 7F

02/24 10:46, , 8F
標頭檔是用來提供模組的「外部介面」而不是把所有的宣
02/24 10:46, 8F

02/24 10:47, , 9F
告都塞進去, 既然只有實作檔會用到你應該用 static 修
02/24 10:47, 9F

02/24 10:49, , 10F
飾或用匿名命名空間隱藏, 真的需要呼叫再自己加上前置
02/24 10:49, 10F

02/24 10:50, , 11F
宣告, 通常只有用到一小部份函式而把整個標頭檔都引入
02/24 10:50, 11F

02/24 10:50, , 12F
是不恰當的
02/24 10:50, 12F

02/24 10:53, , 13F
You need namespaces...
02/24 10:53, 13F

02/24 10:59, , 14F
請別理我= =" 一整個腦殘
02/24 10:59, 14F

02/24 11:11, , 15F
錯誤訊息為何? 多個宣告是ok的, 看你想把他獨立出來,
02/24 11:11, 15F

02/24 11:12, , 16F
實作應該也只有一份才對, A.h B.h 只有一個函式宣告跟
02/24 11:12, 16F

02/24 11:12, , 17F
本沒必要再寫一個標頭出來
02/24 11:12, 17F

02/24 13:53, , 18F
LPH 提供的真的是個簡單的好方法,竟沒想到這點
02/24 13:53, 18F

02/24 22:38, , 19F
使用LPH大的方法時 名稱一樣時請加static不然linker會抗議
02/24 22:38, 19F

02/24 23:35, , 20F
我投降了...直接把funcSame獨立出來了
02/24 23:35, 20F

02/28 18:05, , 21F
寫一個就好了 用extern連結
02/28 18:05, 21F
文章代碼(AID): #1DPMMGPH (C_and_CPP)