Re: [問題] 同一個function在不同cpp檔使用

看板C_and_CPP (C/C++)作者 (我要加入劍道社!)時間16年前 (2009/03/26 00:32), 編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/3 (看更多)
※ 引述《gppo (香蕉是什麼?)》之銘言: : 標題: [問題] 同一個function在不同cpp檔使用 : 時間: Wed Mar 25 22:48:14 2009 : : 我在main.cpp寫了一個function void A(void) [deleted] : 然後在x1.h與x2.h裡面有寫到 : extern void A(void); : 因為想在x1.cpp與x2.cpp裡面使用A這個function : : 但是compile以後有出現下面的warning : x2.h [Warning] redundant redeclaration of `void A(void)' in same scope : x1.h [Warning] previous declaration of `void A(void)' : : 請問該怎麼改寫才不會有這個warning呢? 答案很簡單:你應該寫一個 main.h 其中有 void A(void) 的宣告 然後讓 x1.cpp 和 x2.cpp 去包含 main.h 如果你在 x1.h 和 x2.h 都宣告了 A() 那 main.cpp 同時含入這兩個檔 compiler 當然會抱怨重覆宣告 : 另外有砍掉compile後產生的*.o檔 再執行compile的話 : 會與沒有砍掉*.o檔直接compile的結果不同 : 這是怎麼回事呢? 你的 Makefile 寫錯了 或是你沒用 Makefile 手動重編 結果自己也搞不清楚那些要重編那些不用 記住:只要 XXX.cpp 有包含的任何 header file 有變動 (header 中再去 include 其它的 header file 也包含在內) 那這個檔就要重編 : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 140.116.187.104 : 推 QQ29:function 預設就是extern了 03/25 23:03 : 推 QQ29:我是看14161的@@ 03/25 23:05 : → gppo:= =a 但是如果我把x1.h x2.h裡面的extern那行砍掉 03/25 23:42 : → gppo:他會說undeclared... 03/25 23:43 : 推 sunneo:把A的標頭檔用#pragma once保護 03/25 23:48 不要用 #pragma once 這不是標準 而且問題不是出在這 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.115.147.203

03/26 00:37, , 1F
x1.h 和 x2.h 都宣告了 A() ~~在VC8 好像沒看過這個警告耶
03/26 00:37, 1F

03/26 13:42, , 2F
謝謝!! 說明很清楚orz~
03/26 13:42, 2F
文章代碼(AID): #19obogzd (C_and_CPP)
文章代碼(AID): #19obogzd (C_and_CPP)