我的印象是,使用#import只會在每次構建時導入一次文件,但在嘗試在頭文件中定義一個變量之後,然後將該頭文件導入到兩個不同的源文件中,我得到一個重複的符號鏈接器錯誤的變量。這怎麼可能?obj-c頭文件變量的重複符號
2
A
回答
6
#import
使標頭被包含一次,每文件,但不是每個版本。所以你的變量是在導入你的頭文件的每個文件中定義的,並且因爲全局變量在整個項目中都是可見的,所以你會得到鏈接器錯誤。
正確的方式來定義一個全局變量(如果它是你想要做的)是在實現文件中定義它,並將其與其他文件中的關鍵字外部引用。
也定義變量標題爲靜態將限制其知名度的單個文件,所以你會得到沒有錯誤,但可能不是你想要的結果;)
2
#import
確保了「宣言」只包含一次。由於你正在定義一個變量,它是一個'定義',它使你得到一個重複的符號鏈接器錯誤。
爲了解決這個錯誤 - 使用的.h只申報和.M用於定義
正如普京解釋說,你可以使用的extern
1
我有我已經建立了後一堆重複的符號突然出現新班。
終於意識到自己能夠做到這一點的.m文件:
#import "other-file.m"
注意的 'M'。 :)
相關問題
- 1. -ObjC鏈接器標誌導致重複的符號錯誤
- 2. 重複符號只有頭文件實現
- 3. App_Code文件重複的變量
- 4. 找不到符號變量頭
- 5. 導入C++文件時重複符號
- 6. 計算ObjC(iPhone)中的重複事件
- 7. 重複<meta>在Drupal變量$頭
- 8. C,顯示重複符號的數量
- 9. 重複的符號
- 10. 重複的符號
- 11. 重複的符號錯誤 - 全局變量
- 12. 如何修復導入gl文件中的'重複符號'glm
- 13. -Objc其他鏈接器標誌給出了重複的符號錯誤
- 14. 未定義的符號 - 從頭文件
- 15. 頭文件中重複的類聲明
- 16. XCODE AppelScript ObjC:設置變量
- 17. 在ObjC實現文件中聲明的實例變量
- 18. PHP寫入tars文件,結果重複逗號/標點符號
- 19. 多個文件使用的頭文件中的結構聲明導致架構x86_64的重複符號
- 20. 重複的符號拱X86_64
- 21. NinjaMyApp:重複的符號
- 22. 重複的符號_OBJC_CLASS _ $ _ Base64
- 23. 重複的符號_OBJC_METACLASS _ $ _ ClassName
- 24. LD:重複的符號_dbg_char
- 25. 重複的符號__instance
- 26. 重複的符號_XBAnimationInterpolatorEaseInOut
- 27. XCode:重複的符號
- 28. ld:重複的符號
- 29. _main中的重複符號
- 30. Xcode,重複的符號_main
我相信你在說什麼。我很困惑,因爲根據維基百科,它是每個構建一次,除非我讀錯了: http://en.wikipedia.org/wiki/Objective-C#.23進口 您的解決方案完美地工作。謝謝。 – quano 2009-12-15 15:50:51
#import每個編譯單元包含一次文件,在這種情況下,本質上意味着每個源文件。我不知道任何構建包含指令。 – sbooth 2009-12-16 04:35:07
好的sbooth,謝謝你的澄清。 :) 我看到wikipedia文章也被編輯過。太好了! – quano 2009-12-16 18:00:54