2012-02-02 33 views
0

當我有一個共同的功能類。基本的東西,只是我的項目中可以使用幾個類的函數。但我試圖添加一個結構數組,以便幾個類可以將它們用於某些事情。我從另一個Class(Class 1)中移除了這個數組,並將它們添加到我的CommonFunctions類中。他們只會被閱讀。鏈接誤差加法陣列常用功能類

但是我得到錯誤:

CommonFunctions.obj:錯誤LNK2005: 「結構pup_file *幼崽」(幼仔@@ 3PAUpup_file @@?A)在Class1.obj已經定義 錯誤LNK2005:「結構pup_file *幼崽」在Class1.obj已經定義

致命錯誤LNK1169(幼崽@@ 3PAUpup_file @@?A):一個或多個多重定義符號找到

然後在項目的所有其他類(使用CommonFunctions所以他們真的)我得到

error LNK2005:「struct pup_file * pups」(?pups @@ 3PAUpup_file @@ A)已經在main.obj中定義了

任何人都可以幫我理解這裏發生了什麼?

+1

看到一些代碼,將真正幫助。我懷疑你正在定義標題內的功能,而不是使用「內聯」。 – Goz 2012-02-02 11:24:55

+0

不幸的是,我真的不能在網上發佈代碼。但是,我試圖在頭文件中定義它。我只是想使其成爲內聯和它說: 「內聯」不固定數據聲明 – discodowney 2012-02-02 11:30:45

+0

允許的。我必須使數組靜態。 Cos CommonFunctions被用於大量文件中,每次包含文件時都會定義多次。讓它變成靜態就是一次。 (至少這就是我收集的) – discodowney 2012-02-02 11:42:31

回答

0

看起來你沒有在類定義中聲明指針pups(它不是數組)。
如果你把它放在頭上但是在課外,你會得到類似的錯誤。

的解決方案是確保pupsCommonFunctions類定義內部聲明。

0

在閱讀您對靜態的評論之後,您可能希望將其定義爲extern而不是static,因爲靜態意味着包含該定義的所有內容都會獲得其OWN副本(即不會在所有文件之間共享副本包括它)。

的extern意味着你將需要在C/CPP文件來定義它的地方,但你只需要一次,然後把它定義任何編譯單元,包括將EXTERN使用相同的結構。

當然,你可能真的希望每個編譯單元有它自己的變量和拷貝這種情況下,靜態就是你想要的。