→ VictorTom:推一下, 小弟最近看別人的code也有同樣的問題@_@" 10/17 19:11
推 twotwoone:不行,用VC9編譯器,預設Win32主控台專案編成C 10/17 19:20
→ twotwoone:錯誤1 error LNK2019: 無法解析的外部符號 _bar 在函式 10/17 19:21
→ twotwoone:加上 static 的函數會變成 internal linkage 無法連結 10/17 19:21
→ jacobcrab:難道你include了cpp檔? 10/17 19:23
→ godman362:目前我是將它include進去了 10/17 19:28
→ godman362:將它拉出來的話,就沒辦法編譯過了 10/17 19:28
→ godman362:目前的是.h:static void Test(); 10/17 19:29
→ godman362:.cpp:實做Test() 10/17 19:29
→ godman362:然後include .h檔進來 10/17 19:29
→ godman362:不過如果將實做移到.h的話,卻又可以編譯過 10/17 19:32
→ godman362:請教一下,為什麼會造成這樣的結果? 10/17 19:33
→ twotwoone:include就只是在該地,展開被include檔內容而已吧 10/17 19:39
→ twotwoone:實做放.h就等於你把函數寫在同一個檔案,產生同個obj了 10/17 19:40
→ twotwoone:意思就是這樣做的時候,沒有連結的需要 10/17 19:40
→ godman362:所以對.h來說,其實只是一個巨集而已是嗎? 10/17 19:41
→ godman362:我的意思是,.h對main.cpp而言只是個巨集而已是嗎? 10/17 19:41
→ twotwoone:如果我沒搞錯,那是這樣沒錯 10/17 19:41
→ godman362:這樣我明白了,謝謝指點 10/17 19:44
推 QQ29:static 就限制該檔案專有的function 10/17 20:20
→ QQ29:你把實作寫在.cpp那他就會當成不同檔案 一個是main.cpp 10/17 20:21
→ QQ29:一個是你另一個cpp寫的實作 但是main.cpp看到的只有.h的宣告 10/17 20:21
→ QQ29:所以他會說你沒有定義~ 10/17 20:22
推 legnaleurc:static 修飾 function 代表 internal linkage ... 10/17 21:06
→ godman362:謝謝兩位,不過想請教一下l大,什麼叫linkage? 10/17 21:49
→ legnaleurc:function 預設是 external linkage 10/17 22:49
→ godman362:謝謝l大,我會詳細看一下 10/18 07:24