0

我有一个带有单个 C 样式函数的 .h 文件:

void myFunc(NSArray *array) {
    ...
}

我希望这个功能在每个文件中都可用,所以我#import "Functions.h"进入了我的 App-Prefix.pch 文件。

但是,这给了我一个编译错误ld: 38 duplicate symbols for architecture i386。这样做的正确方法是什么?

4

1 回答 1

2

你不应该在头文件中实现实际的 C 函数体,就像你不应该在头文件中实现 Objective-C 方法一样。

我的函数

    void myFunc(NSArray *array);

我的函数

    void myFunc(NSArray *array) {
        ...
    }

显然,您还应该#ifndef在标题顶部添加 a ,如果您决定不使用任何 Objective-C in myfunc.m,您也可以将其重命名为myfunc.c.

更新:
原因是头文件是从程序的多个入口点(多个文件)中收集的。然后你的编译器有点头晕,开始想知道你真正想要调用什么函数体(因为有多个)。一个更明显的例子是在一个 C 文件中两次声明相同的函数名。最后,您应该使用头文件来“描述”您的函数(添加文档和所有内容),然后使用您的主文件(.m)或 C 文件(.c)来指示编译器在调用该函数时要做什么.

于 2013-04-09T20:01:11.297 回答