作者littleshan (我要加入劍道社!)
看板C_and_CPP
標題Re: [問題] 同一個function在不同cpp檔使用
時間Thu Mar 26 00:32:39 2009
※ 引述《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
推 QQ29:x1.h 和 x2.h 都宣告了 A() ~~在VC8 好像沒看過這個警告耶 03/26 00:37
推 gppo:謝謝!! 說明很清楚orz~ 03/26 13:42