0

我的 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 应该防止它吗?

4

2 回答 2

3

问题是const int DIFFICULTY_CUSTOM = -1;分配该名称的 int 是在您为其包含标头的每个目标文件中。
您应该只extern const int DIFFICULTY_CUSTOM;在每个标题中都有声明。然后应const int DIFFICULTY_CUSTOM = -1;在一个目标文件(即 .m 或 .c )中定义实际值。

在这种情况下,我将只使用#define 来设置值。

于 2012-07-12T14:02:28.613 回答
1

这是我的做法:

constants.m

const int DIFFICULTY_CUSTOM = -1;

constants.h

extern const int DIFFICULTY_CUSTOM;

并在.pch文件中:

#import "constants.h"
于 2012-07-12T14:05:49.147 回答