我的 Objective-C 应用程序中需要一些全局变量。为此,我创建了 Globals 类(继承 NSObject)并将只读属性放入其中。我还声明了一些常量,如下所示:
imports, etc.
.
.
.
#ifndef GLOBALS_H
#define GLOBALS_H
const int DIFFICULTY_CUSTOM = -1;
const int other_constants ...
#endif
.
.
.
interface, etc.
但是当我尝试编译它时,出现链接器错误:“重复符号 DIFFICULTY_CUSTOM”。为什么会发生这种情况,ifndef 应该预防它吗?
问题是
const int DIFFICULTY_CUSTOM = -1;
在您包含其标头的每个对象文件中分配一个该名称的 int 。 extern const int DIFFICULTY_CUSTOM;
。然后应在一个目标文件(即 .m 或 .c)中定义实际值const int DIFFICULTY_CUSTOM = -1;
。
在这种情况下,我只需使用#define 来设置值。
我的做法是这样的:
在
constants.m
:
const int DIFFICULTY_CUSTOM = -1;
在
constants.h
:
extern const int DIFFICULTY_CUSTOM;
并在
.pch
文件中:
#import "constants.h"