我想知道如何在.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);
我也尝试过其他方法来做到这一点,但从来没有找到沉默链接器错误的方法 它应该和宏一样快,但是函数写得太长,我更喜欢类型检查,所以我需要一个内联函数。
答案 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文件中定义它。