objective-c中的重复符号错误

时间:2012-07-12 13:57:47

标签: objective-c compiler-construction linker

我的Objective-C应用程序中需要一些全局变量。为此,我创建了类Globals(继承了NSObject)并在其中添加了readonly属性。我也宣布了一些常量,如下:

imports, etc.
.
.
.
#ifndef GLOBALS_H
#define GLOBALS_H

const int DIFFICULTY_CUSTOM = -1;
const int other_constants ...
#endif
.
.
.
interface, etc.

但是当我尝试编译它时,我得到链接器错误:“重复符号DIFFICULTY_CUSTOM”。如果发生这种情况,为什么会这样呢?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

我是这样做的:

constants.m

const int DIFFICULTY_CUSTOM = -1;

constants.h

extern const int DIFFICULTY_CUSTOM;

并在.pch文件中:

#import "constants.h"