Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/101.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios #在Objective-C的头文件中定义_Ios_Objective C_Iphone_Macros_C Preprocessor - Fatal编程技术网

Ios #在Objective-C的头文件中定义

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,那么它就不起作用了,但是

我有一个全局的。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'.
我该如何解决这个问题呢?

这应该很好,假设您在使用它之前没有取消定义它。在
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()
肯定会不时为您节省一些击键次数,但它也会给您的项目增加负担,您需要告诉与您合作的任何人这就是您正在做的事情。这就是为什么人们坚持使用标准来简化协作。