具有Objective-C ++功能。 (该文件具有正确的.mm扩展名。)
int SPGetNumericAttribute(NSMutableString* line, NSString* &attr) {...}
一些代码调用如下:
NSString* queryAttr = nil;
int res = SPGetNameAttribute(line, queryAttr); <-- error
编译抱怨:
没有匹配函数调用'SPGetNameAttribute'。
是否有技术原因导致您无法将Objective-C对象传递给C ++引用参数? 我的猜测与ARC有关。
答案 0 :(得分:0)
ARC需要知道如何处理函数内部第二个参数的引用计数。默认情况下,该参数具有自动释放类型。因此,变量queryAttr
必须具有自动释放ARC类型
__autoreleasing NSString* queryAttr = nil;
或者您可以将您的功能声明为
int SPGetNumericAttribute(NSMutableString* line, NSString* __strong &attr) { ... }
并且强变量的错误消失了。使用Instruments进行的测试表明,ARC似乎也正在处理这个问题。但是,您可能只对此参数使用强变量。
我认为如果你改用指针会更好:
int SPGetNumericAttribute(NSMutableString* line, NSString** attr) { ... }