Re: [問題] 同一個function在不同cpp檔使用
看板C_and_CPP (C/C++)作者littleshan (我要加入劍道社!)時間16年前 (2009/03/26 00:32)推噓2(2推 0噓 0→)留言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
03/26 00:37, 1F
推
03/26 13:42, , 2F
03/26 13:42, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章