好久沒來更新了,這里已是灰塵密布,都快進不來人了。這篇小札就當是掃灰吧。
最近要給程序增加一點新功能,經(jīng)過大體的設計后,添加了一個類和該類的一個全局對象。然后就是加方法、調(diào)試測試,等弄的差不多了就放心地撂下了。
過了沒兩天,再打開準備進一步修改的時候,發(fā)現(xiàn)鏈接通不過了,提示有兩個OBJ文件LNK2019 LNK2001——又是經(jīng)典的UNRESOLVED SYMBOL問題。
源代碼、工程設置里都找了,沒發(fā)現(xiàn)什么線索,更是覺得難以置信:因為記憶中從上次鏈接執(zhí)行到出問題根本就沒作過什么重大修改——只是潤色代碼格式、加個TAB或刪個空行之類的怎么也不會產(chǎn)生這種錯誤。
重新完全鏈接,編譯器也絲毫不為之所動,一點改觀沒有。
到這,開發(fā)陷入僵局。
我是最怕這種情況的,因為不知道會耽擱多久。
只能怪自己基礎知識不過硬,不能一眼發(fā)現(xiàn)問題所在,沒辦法,只有一點一點地毯試搜索了。我試著把牽涉問題的兩個源代碼文件一點一點地注釋掉,編譯鏈接,如果沒問題再縮小注釋范圍,再鏈接,如此反復。中間也試著DUMPBIN生成的鏈接通不過的OBJ文件,怎奈茫茫符號,不知道哪個是我要找的。。。
最后,還是地毯試搜索發(fā)揮了作用,原來是不知道什么時候我把新添加類的兩個成員函數(shù)定義前面加了INLINE,而去掉INLINE就什么問題都沒有了。而到這個時候,時間已經(jīng)過去了一天半!
不過,還是搞不明白,為什么INLINE后就找不到函數(shù)定義了。比較了一下INLINE前后在OBJ文件上執(zhí)行DUMPBIN /SYMBOLS的輸出,果然加了INLINE后,對應的函數(shù)符號就沒了!?
找出 THINKING IN C++,把INLINE的那一章大致讀了一便,也沒發(fā)現(xiàn)有這方面的說明。
另:不知道是我的環(huán)境設置不對還是什么,VS2003發(fā)出LNK2019,LNK2001之類提示時,卻不告訴我是哪個/哪寫符號不能解析,否則也不會盲目找了,而以前在VC6里是有的。這難道不應該是LINKER的一個基本功能嗎?