2010-01-08 81 views
2

正如背景一樣,主題項目「Project」中沒有編譯時錯誤或警告。鏈接時重複的符號

在兩個(或更多類)中使用相同的實例變量名稱有很多次。在下面,我將使用變量名稱「index」作爲示例。它在class1和class2中顯示爲一個實例變量。這兩個類中的變量具有不同但相似的含義,因此使用了通用術語。

我在兩者的Class1和等級2的頭文件中定義的索引,例如:

@interface的Class1:NSObject的 { INT指數; } ...

對於class2重複。

當我生成項目,Xcode的報道:

在/Project/build/Project.build/Debug-iphonesimulator/Project.build/Objects-normal/i386/class1.o和/項目重複符號_index /build/Project.build/Debug-iphonesimulator/Project.build/Objects-normal/i386/class2.o

將「index」的出現次數更改爲「indexnotverycommon」,將報告與新名稱相同的錯誤。

分別將出現次數改爲「index1」和「index2」可以消除錯誤。然後Xcode會報告鏈接期間發現的下一個重複內容,依此類推,等等。

我可以繼續重命名過程,但我寧願不要,因爲我擔心存在更多的病態潛在問題。

任何意見或問題表示讚賞。

+0

您可以發佈您的類的完整文本(刪除不必要的代碼,直到它失敗)。就我個人而言,我認爲你應該仔細檢查,看看你是否真的聲明瞭兩者都是@interface class1。 – 2010-01-08 18:04:02

回答

2

索引也是一個C函數,因此是Objective-C中一個非常不幸的名字。 這article描述了爲什麼使用索引作爲名稱不是一個好主意。

我不確定爲什麼你會得到重複的符號。

0

我想通過使用Xcode find-in-project功能。感謝有關索引的建議。

+10

這是因爲你意外地有一個.m文件的#import,你的意思是.h? – cdespinosa 2010-01-08 20:59:00

+0

cdespinosa,希望我可以upvote這個,我跑出了想法,這是解決方案。謝謝。編輯:原來我可以upvote這:) – marimba 2011-08-24 12:40:28

0

提示檢查#import "Xxx.m"而不是正確.h的工作。

"Xxx.m"的快速工作空間範圍搜索發現了導致鏈接錯誤的include中的錯誤。

0

請勿#include或#import .m文件。只需將這些.m文件添加到Target |建立階段。不要將.h文件添加到構建階段,而是在需要這些功能的地方使用#import .h文件。

編譯器知道這只是一個頭文件「僅供參考」,而職能的機構將可用時,它會編譯.m文件,並把他們都變成1個可執行

頭文件只包含前向聲明。編譯器知道正文是在另一個文件中定義的,或者在鏈接到該項目的庫中