2013-02-27 30 views
0

我有一個簡單的.h文件中是這樣的:爲什麼鏈接器在這裏不會產生多個定義錯誤?

//test.h 
int x = 12; 

如果我包括在該文件中,例如,main.cppfunctions.cpp鏈接器將產生這個錯誤是合理的:

error LNK2005: "int x" ([email protected]@3HA) already defined in functions.obj 

但是,當我更改變量定義:

//test.h 
const int x = 12; 

鏈接器錯誤消失。辦法?

回答

5

在名稱空間範圍內聲明的名稱爲const的名稱具有內部鏈接。也就是說,包含test.h的每個文件都將擁有自己的對象,名稱爲x。請參見7.1.1節/ 7:

在命名空間範圍內聲明的名稱,沒有存儲類說明符有外部鏈接,除非它有因爲先前聲明的內在聯繫,並只要不聲明const 。聲明爲const的對象和未明確聲明爲extern的對象具有內部鏈接。

+0

等等,這不可能是正確的 – 2013-02-27 18:53:33

+0

@MooingDuck:那可能是,也是,是的。 – 2013-02-27 18:55:39

+0

@MooingDuck對不起,錯誤的部分。 §7.1.1/ 7。 – 2013-02-27 18:55:56

相關問題