最近在做開發的時候用到很多自己編寫的頭文件,這樣很容易出現 error LNK2005,經過查閱資料,發現網上很多資料都是轉載同一個地方的,而當時閱讀時一些不明白的地方費了一番周折,不過最終把問題解決了。
網上也有很多五花八門的解決方案,這裡總結一種可行的。開發環境為 VS 2008。
首先,盡量保證在頭文件中只聲明變量和函數,不要定義。這個很重要,不然鏈接時候會出現麻煩。不僅是變量不定義,函數也不要出現定義,但可以出現聲明。
其次,如果以上問題解決後,還有 error LNK2005,那就在每個頭文件中作如下修改:
1、在頭文件的開頭加入
#ifndef _HEAD_H_ //如果沒有定義這個宏
#define _HEAD_H_ //定義這個宏
2、在頭文件末尾加入
#endif
這樣加入之後的頭文件內容為:
#ifndef _HEAD_H_ //如果沒有定義這個宏
#define _HEAD_H_ //定義這個宏
。。。。。//此處為頭文件原來的內容
#endif
說明:加入上述信息的目的是告訴鏈接程序,該頭文件只能被鏈接一次,這樣就可以避免重定義問題。對於宏名字,(此處為 _HEAD_H_)選取的問題,要保證所有頭文件中的名字不同,不然鏈接程序定義具有相同名字的某個頭文件之後,所有含有相同宏名字的頭文件都不會再被鏈接。通常的一個命名方法是,把頭文件名全部大寫,然後前後加上 _ ,再用 _ 替換 . ,如頭文件為 title.h,則命名為: _TITIE_H_
經過這兩步,基本error LNK 2005 就解決了。
僅供初學者參考,如有問題請留言。