2011-07-05 36 views
4

頭文件我有一個Global.h看起來像的#define在Objective-C的

 
#define NUMBERX 21 

在AppDelegate.h我包括Global.h文件。在AppDelegate.m中我包含了AppDelegate.h文件。但是在AppDelegate.m中,我無法訪問NUMBERX變量。

 
ERROR: Use of undeclared indentifier 'NUMBERX'. 

如果我在AppDelegate.h定義NUMBERX比它的工作原理,但我想只包括在我想使用NUMBERX變量的所有其他頭文件的頭文件(Global.h)。

我該如何解決這個問題?

+0

命名是否在AppDelegate.h工作的一些不錯的指引? – Luke

+0

是的。但那不是我想要的。我只想爲整個項目定義一次變量。 – TheFox

+0

不,我的意思是你可以訪問AppDelegate.h中的NUMBERX嗎?或者你也有錯誤嗎? – Luke

回答

1

如果您使用objective-c標準#import來包含頭文件,請嘗試將其替換爲「c」#include

+0

是的,THX。這工作正常。也許objective-c標準'#import'用於具有關聯.m文件的文件。我的Global.h沒有Global.m的兄弟。 – TheFox

+0

@TheFox - 不,情況並非如此 - Objective-C協議只是頭文件,沒有相應的實現文件,而且它們都可以工作。 – Abizern

+0

@Abizern - 好的,但問題肯定是'#import'而不是'#inc'。 Thx全部爲您的答案。 – TheFox

1

這應該沒問題,假設你在使用它之前不是#undef。在將AppDelegate.h包含在AppDelegate.m文件中之前,您是否正在使用符號?你是否在使用可能禁止它包含在內的守衛?

+0

包含衛兵的含義是什麼?不,我沒有'#undef'。是的,我將所有頭文件包含在每個文件的頂部。這意味着我在包含'AppDelegate.h'文件之前不使用該符號。 – TheFox

+0

包含守衛就像'#ifndef _SOMESYMBOL ...#endif'裏面的標題,以防止他們的雙重包含導致錯誤。如果您重複使用相同的警衛符號兩次,這可能會導致此問題。如果你不這樣做,我們需要更多的信息(即最小版本的文件仍然不起作用)。 –

0

您必須將您的Global.h文件包含在AppDelegate.m文件中。

+0

這也是行不通的。只有當我在AppDelegate.h中定義變量時,它才起作用。 – TheFox

0

你不能使用int const NUMBERX那麼你會得到代碼完成和編譯器檢查。

蘋果對定義常量和他們在這裏 Apple Coding Guidelines - Constants

+0

是的,因爲有多種方法可以實現這一點。我更深層的意義是,我用宏定義的'l()'函數替換了所有'NSLOG()'。在生產中,我沒有定義'DEBUG'變量,所以所有的日誌輸出都不顯示。 – TheFox

+0

純粹是因爲你得到代碼完成和編譯器檢查的事實,我認爲從Apple文檔建議的方法優於#define。另外,如果你在整個項目的大部分時間都需要一個常量,你可以考慮在''pch'文件中加入'Global.h'。定義宏l()''''''''''''''''''''''''''''''''''''''''''''''當然會節省幾個按鍵,但它也增加了你的項目的負擔,你需要告訴任何你合作的人,這就是你正在做的。這就是爲什麼人們堅持使標準更容易協作。 –