Ios #在Objective-C的头文件中定义
我有一个全局的。h看起来像 #define NUMBERX 21 #定义数字21 在AppDelegate.h中,我包含Global.h文件。在AppDelegate.m中,我包含AppDelegate.h文件。但是在AppDelegate.m中,我无法访问NUMBERX变量 ERROR: Use of undeclared indentifier 'NUMBERX'. 错误:使用未声明的标识符“NUMBERX”。 如果我在AppDelegate.h中定义NUMBERX,那么它就不起作用了,但是我只想在我想要使用NUMBERX变量的所有其他头文件中包含头文件(Global.h) ERROR: Use of undeclared indentifier 'NUMBERX'.Ios #在Objective-C的头文件中定义,ios,objective-c,iphone,macros,c-preprocessor,Ios,Objective C,Iphone,Macros,C Preprocessor,我有一个全局的。h看起来像 #define NUMBERX 21 #定义数字21 在AppDelegate.h中,我包含Global.h文件。在AppDelegate.m中,我包含AppDelegate.h文件。但是在AppDelegate.m中,我无法访问NUMBERX变量 ERROR: Use of undeclared indentifier 'NUMBERX'. 错误:使用未声明的标识符“NUMBERX”。 如果我在AppDelegate.h中定义NUMBERX,那么它就不起作用了,但是
我该如何解决这个问题呢?这应该很好,假设您在使用它之前没有取消定义它。在
AppDelegate.m
文件中包含AppDelegate.h
之前,是否使用该符号?您是否使用了可能会禁止其包含的包含保护程序?您必须在AppDelegate.m文件中包含您的全局.h文件。如果您使用objective-c standard\import
包含头文件,请尝试将其替换为“c”#include
如果您不能使用int const NUMBERX
,那么您将获得代码完成和编译器检查
苹果在定义常量和命名常量方面有一些很好的指导方针
你说的“包括警卫”是什么意思?不,我没有
#undef
。是的,我在每个文件的顶部包含所有头文件。这意味着我在包含AppDelegate.h
文件之前不使用该符号。包含防护是类似\ifndef\u SOMESYMBOL的东西#endif
在标题内部,以防止其双重包含导致错误。如果重复使用同一保护符号两次,可能会导致此问题。如果您不这样做,我们将需要更多信息(即仍然不工作的文件的最低版本)。它在AppDelegate.h中工作吗?是的。但那不是我想要的。我只想为整个项目定义一次变量。不,我的意思是你能访问AppDelegate.h中的NUMBERX吗?或者你在那里也有错误吗?如果你把它放在pch文件中是否有效?你犯了一些基本的错误。某个地方的名称拼写错误,#在注释中实际定义,冲突的h文件名等等,这些都不起作用。只有在AppDelegate.h中定义变量,它才能工作。是的,THX。这个很好用。objective-c标准#import
可能用于具有相关.m文件的文件。我的Global.h没有Global.m兄弟。@TheFox-不,不是这样-Objective-C协议只是头文件,没有相应的实现文件,它们可以工作。@Abizern-啊,好的,但问题肯定是#import
而不是#include
。谢谢你的回答。这在2016年仍然适用吗?是的,当然,有多种方法可以实现这一点。我更深层次的感觉是,我用宏定义的l()
函数替换了所有NSLOG()
。在生产中,我没有定义DEBUG
变量,因此没有显示所有日志输出。纯粹是因为您得到了代码完成和编译器检查,我相信Apple文档中建议的方法优于#define。此外,如果在整个项目中都需要常量,则可以考虑将<代码>全局.h <代码>添加到<代码> pCH <代码>文件中。定义宏l()
肯定会不时为您节省一些击键次数,但它也会给您的项目增加负担,您需要告诉与您合作的任何人这就是您正在做的事情。这就是为什么人们坚持使用标准来简化协作。