2011-12-19 20 views
1

在我的應用程序委託類我定義一個常量,像這樣:爲什麼我的'kMyConstant'宏被重新定義?

#define kSomeConstant @"My_Constant_Value" 

然後我想利用這個不斷在另一個的viewController,所以我就像上面那樣再次定義它。我現在收到消息:

'kSomeConstant' macro redefined 

爲什麼會出現這種情況?有沒有其他方法可以訪問常量?

+0

您是否在視圖控制器中導入了您的應用程序委託標題?如果你是,宏已經定義了,所以這個錯誤。因此你不需要額外的'#define',你可以使用常量。 – paulbailey 2011-12-19 13:57:52

回答

3

只需重新定義常數(即:相同的常數名稱)。選擇另一個名稱,或在頭文件中只定義一次,以便在導入該頭文件的每個位置訪問常量值。

0

編譯器遇到了宏的兩個定義。可能您將其定義在頭文件中,然後在.m文件中再次定義它。

如果您無法確定兩個定義來自哪裏,請嘗試使用該錯誤對文件進行預處理(在Xcode 4.2中,這在產品菜單中的生成輸出下)。然後,您可以搜索kSomeConstant,那應該告訴你它來自哪裏。

2

它很可能在編譯器可見的源代碼中定義了兩次。如果您更詳細地查看消息,編譯器可能會告訴您以前定義的位置。

要避免此問題完全,聲明你NSString常數是這樣的:

file.h - 聲明:

extern NSString* const kSomeConstant; 

file.m /毫米 - 定義:

NSString* const kSomeConstant = @"My_Constant_Value"; 

然後當你需要使用常數時,只需#include "file.h"