objective-c 中的重复符号错误

问题描述 投票:0回答:2

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

objective-c linker
2个回答
3
投票

问题是

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

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


1
投票

我的做法是这样的:

constants.m

const int DIFFICULTY_CUSTOM = -1;

constants.h

extern const int DIFFICULTY_CUSTOM;

并在

.pch
文件中:

#import "constants.h"
© www.soinside.com 2019 - 2024. All rights reserved.