2013-09-22 57 views
4

C++強制程序員在類外部定義一個非常量靜態成員,我一直看到的原因是,如果靜態成員是在類中定義的,則會導致靜態成員有多個定義。我知道有一個靜態成員的多個定義有 是不好的,但我不明白這些多個定義甚至會來自何處。不應該初始化非常量靜態成員 只是在數據部分去,這是唯一的定義?爲什麼非常量靜態成員有多個定義?

struct Student { 

    static int x = 4; // Why would this result in multiple definitions? 

}; 

另外,我在其他計算器後閱讀量靜態成員簡單地聯到代碼無論在何處使用: Why can't I have a non-integral static const member in a class? 是由預處理器與所有其他指令處理一起? (如果需要,我會在另一個帖子中提問,但我不確定它是否值得單獨發佈)。

回答

6

這會發生,因爲/當你的頭被包含在多個「翻譯單元」(想想.cpp文件)。

然後每個TU將包含定義的副本。

在鏈接時,它們會發生衝突。 (鏈接器鏈接來自每個翻譯單元的對象)

+0

您能否提供一個這樣的例子? – Kacy

+0

好吧,成員聲明根本就不是一個定義... –

+2

我假設OP在詢問爲什麼構造是非法的 – sehe

相關問題