导入配置文件会生成mach-o-linker

时间:2013-09-25 11:32:18

标签: objective-c xcode

非常奇怪,我有一个包含许多const和变量的.h文件。

我有两个使用他的课程,因此导入他:

classAclassB :( #import "configurations.h"

现在我添加的另一个新类C进来了,当我尝试对他做同样的事情时,导入配置文件 - 我收到mach-o-linker错误。

检查一下:即使新类C为空(!),我也无法添加该配置文件并获得相同的错误。我也尝试过新课程,也是如此。 我只能将它添加到A B,现在不再导入了!

修改

好的,我现在明白了,首先它不会发生在A类和B类中,因为:A.mB.mm因此我可以用.h文件导入它们。

问题可能是因为我不会在.h文件中使用extern和我的consts? (我试过extern但仍然有错误),我从.h创建了2个consts副本: 我如何在.h文件中定义它们?就像那样:

const int wordSize=8;
const int numOfWords=8;

我在这里失踪了吗?

(还有一些其他D类,如果有问题则导入A B C)

1 个答案:

答案 0 :(得分:0)

.h文件用于声明
.m文件用于定义
这意味着没有“=”符号.h,没有方法实现。如果你有常数:

configurations.h

extern const int wordSize;
extern NSString * const someStringConst;

configurations.m

const int wordSize = 8;
NSString * const someStringConst = @"someStringConst";

如果你导入你的 configurations.h

const int wordSize = 8;

从多个文件中,编译器为每个导入配置的文件生成_wordSize符号 链接器肯定无法解析这些重复的符号 - 因此最好的方法是使用extern声明来删除.h文件中的定义,如上所示。