当我尝试在 h 文件中声明变量时,它显示错误 LINKER COMMAND FAILED WITH EXIT CODE -1

When i try to declare variables in h file it shows the error LINKER COMMAND FAILED WITH EXIT CODE -1

如何在 objective c 中全局声明一个变量?当我尝试在 h 文件中声明变量时,它显示错误

LINKER COMMAND FAILED WITH EXIT CODE -1

像这样声明一个全局变量:

extern int GlobalInt;

extern 部分告诉编译器这只是声明存在一个由 GlobalInt 标识的 object 类型的 int。它可能稍后定义,也可能不定义(确保它存在不是编译器的责任,这是链接器的工作)。它在这方面类似于函数原型。

在您的一个源文件中,您定义了 GlobalInt 整数:

int GlobalInt = 4;

现在,每个包含 header 的文件都可以访问 GlobalInt,因为 header 表示它存在,所以编译器很高兴,链接器会在您的其中一个文件中看到它源文件,所以它也会很高兴。只是不要定义它两次!

在 header 个文件中,将变量声明为 extern.

extern NSInteger myGlobalInteger;

在单个实现文件中(.c.m),声明为正常。

NSInteger myGlobalInteger;

如果您在 header 中省略 extern,则会导致在 imports/includes [=27] 的每个文件中创建一个具有相同名称和作用域的新变量=].这会导致 link 麻烦,因为您最终会得到重复的符号。

在 header 中将变量声明为 extern 告诉编译器某处存在这样一个具有给定类型的变量。它不关心它真正被定义的地方。在 link 时,link 用户将看到所有这些对真实声明的引用和 fix-up 引用。

请在.m文件中也定义相应的变量。请找到下面的例子:

对于标准全局变量,在应用程序终止和重新启动时不持久,将其添加到您选择的头文件 (*.h) 中:

extern NSInteger MYGlobalVariable; 

然后把这个放到实现文件中(*.m,*.c,*.cpp):

MYGlobalVariable = 0; // Or ny other default value.

这就是你做面包和黄油全局变量的方式。