0

我想知道如何在 .m 文件中声明函数,但在这里我得到一个链接器错误。我在 .h 文件中声明了这个:

#import <Foundation/Foundation.h>
// Other rimports

void SQLite3HelperHandle(NSError* error);

@interface SQLite3Helper : NSObject

// Method signatures

@end

然后在 .m 文件中:

#import "SQLite3Helper.h"

void SQLite3HelperHandle(NSError* error)
{
    // Method body
}

@implementation SQLite3Helper

// Methods implementation

@end

但我得到一个链接器错误。错误有很多不可读的信息。唯一相关的是:

“_SQLite3HelperHandleError”,引用自:

另外,我如何声明它内联?我尝试在标题中以这种方式声明它:

extern inline void SQLite3HelperHandle(NSError* error);

通常在 .m 文件中:

void SQLite3HelperHandle(NSError* error);

我还尝试了其他方法来做到这一点,但从未找到消除链接器错误的方法。
它应该和宏一样快,但是这个函数写得太长了,我更喜欢类型检查,所以我需要一个内联函数。

4

3 回答 3

2

看起来像 C++ 风格的函数名称修饰。

为了解决这个问题,把你的 C 风格函数声明(在你的 .h 文件中)放在这个条件之间:

#ifdef __cplusplus
extern "C" {
#endif

void SQLite3HelperHandle(NSError* error);

#ifdef __cplusplus
}
#endif

有关此操作的更多信息,请参见此相关问题 或此问题。

于 2012-12-15T21:44:23.330 回答
1

听起来 .m 文件需要包含在您正在构建的目标中。

FOUNDATION_EXPORT void ...在 .h 中使用以及在 .m 文件中使用的内容。

于 2012-12-15T21:44:55.357 回答
0

要将函数内联定义为static inline,无论它是否在标题中。如果您只需要在一个文件中使用它,只需在该 .m 文件中定义它并将其放在标题之外。否则,将其完全定义在 .h 文件中。

于 2012-12-15T23:09:02.717 回答