我在单独的头文件中编写了自定义结构。它看起来像这样
typedef struct RequestSpecifics {
BOOL includeMetaData;
BOOL includeVerboseData;
} RequestSpecifics;
现在我想制作一个定制的' make'方法,类似于CoreLocation结构CLLocationCoordinate2 CLLocationCoordinate2DMake
方法。
我尝试了两种不同的方式。虽然两种方式都没有在.h文件中出现错误,但是当我想使用make方法时,我确实会出错。
方法1:
extern RequestSpecifics RequestSpecificsMake(BOOL includeMetaData, BOOL includeVerboseData);
抛出:
Apple Mach-O Linker
" _RequestSpecificsMake",引自:
错误链接器命令失败,退出代码为1(使用-v查看调用)
方法2:
extern RequestSpecifics RequestSpecificsMake(BOOL includeMetaData, BOOL includeVerboseData) {
RequestSpecifics specifics;
specifics.includeMetaData = includeMetaData;
specifics.includeVerboseData = includeVerboseData;
return specifics;
}
抛出:
Apple Mach-O Linker
错误链接器命令失败,退出代码为1(使用-v查看调用)
用法示例:
RequestSpecificsMake(NO, NO)
我已检查所有common solutions的Apple Macho-Linker错误,但似乎没有任何效果或解决方案不相关。
那么我该如何正确实施' make'结构的方法?
答案 0 :(得分:2)
所以显然方法2应该是实现,它不应该在.h文件中。当然,我也需要一个.m
文件。这应该是正确的方法:
.h文件
RequestSpecifics RequestSpecificsMake(BOOL includeMetaData, BOOL includeVerboseData);
.m文件
RequestSpecifics RequestSpecificsMake(BOOL includeMetaData, BOOL includeVerboseData) {
RequestSpecifics specifics;
specifics.includeMetaData = includeMetaData;
specifics.includeVerboseData = includeVerboseData;
return specifics;
}
最后我必须结合两种方法!此外,根据它的外观,不需要extern
关键字。
答案 1 :(得分:1)
为什么不试试
static inline
代替extern
static inline RequestSpecifics RequestSpecificsMake(BOOL includeMetaData, BOOL includeVerboseData) {
RequestSpecifics specifics;
specifics.includeMetaData = includeMetaData;
specifics.includeVerboseData = includeVerboseData;
return specifics;
}
或者如果您想使用extern
,则需要在.m文件中编写。