我有一个带有单一C风格函数的.h文件:
void myFunc(NSArray *array) {
...
}
我希望这个函数在每个文件中都可用,所以我#import "Functions.h"
进入我的App-Prefix.pch文件。
但是,这给了我一个编译错误ld: 38 duplicate symbols for architecture i386
。这样做的正确方法是什么?
答案 0 :(得分:2)
您不应该在头文件中实现实际的C函数体,就像您不应该在头文件中实现Objective-C方法一样。
<强> myfunc.h 强>
void myFunc(NSArray *array);
<强> myfunc.m 强>
void myFunc(NSArray *array) {
...
}
显然,您还应在标题的顶部添加#ifndef
,如果您决定不在myfunc.m
中使用任何Objective-C,您也可以将其重命名为{{1 }}
<强>更新强>
原因是头文件是从程序中的多个入口点(多个文件)中收集的。然后你的编译器有点头晕并开始想知道你实际上想要调用什么功能体(因为有多个)。一个更明显的例子是在单个C文件中声明两次相同的函数名。最后,您应该使用头文件来“描述”您的函数(添加文档和所有这些),然后使用您的main(.m)或C文件(.c)来指示编译器在调用该函数时该怎么做