假設我創建的頭文件和constants.h此文件包含:具有恆定變量定義鏈接在頭文件
extern const int YEAR = 2011; // definition
如果我在CPP文件(MainCPP.cpp)試圖使用這個恆定後宣佈它沒有定義它,而不包括constants.h文件如下:
extern const int YEAR; // declaration
int main() {
cout << YEAR << endl;
}
當我嘗試這樣做,我得到:解析外部符號「INT常量YEAR」。另一方面,如果我將YEAR的定義放在constant.cpp文件中,並且在MainCpp.cpp中完成了相同的操作,我將不會收到錯誤,並且鏈接程序將能夠與constants.cpp中定義的YEAR鏈接(不包括MainCpp.cpp中的constants.cpp也在這裏)。
這是否意味着鏈接器可以鏈接源文件代碼,但不能與頭文件代碼鏈接,除非您明確包含頭文件。
感謝[羅布K](http://stackoverflow.com/users/53089/rob-k)..我試圖包括constants.h在另一個cpp文件(而不是MainCpp.cpp),現在鏈接器能鏈接MainCpp.cpp文件中使用的YEAR。這證明編譯器不會編譯.h文件。它包含在.cpp文件中,其中#included通過用.h文件的內容替換#include <...>,並且沒有爲.h文件本身生成目標代碼。 – nizar