链接器错误声明类内的函数

时间:2012-12-15 21:39:42

标签: objective-c inline

我想知道如何在.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);

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

3 个答案:

答案 0 :(得分:2)

看起来像C ++样式函数名称错误。

要解决此问题,请将此C条样式函数声明(在.h文件中)放在此条件之间:

#ifdef __cplusplus
extern "C" {
#endif

void SQLite3HelperHandle(NSError* error);

#ifdef __cplusplus
}
#endif

有关此操作的更多信息,请参见in this related question or this one

答案 1 :(得分:1)

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

我在.h中使用FOUNDATION_EXPORT void ...,而在.m文件中使用的是。{/ p>

答案 2 :(得分:0)

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