为了测试,我复制了以下示例代码[https://developer.apple.com/library/ios/documentation/CoreFoundation/Conceptual/CFCollections/Articles/creating.html]并编译它:
#import <CoreFoundation/CoreFoundation.h>
CFStringRef strs[3];
CFArrayRef anArray;
strs[0] = CFSTR("String One");
strs[1] = CFSTR("String Two");
strs[2] = CFSTR("String Three");
anArray = CFArrayCreate(NULL, (void *)strs, 3, &kCFTypeArrayCallBacks);
现在我收到以下错误:“没有匹配函数来调用CFArrayCreate”
为什么它不可编译以及如何实现它是可编译的?
答案 0 :(得分:5)
CFArrayCreate()
的第二个参数的类型是const void **
。因此,请将呼叫更改为:
anArray = CFArrayCreate(NULL, (const void **)strs, 3, &kCFTypeArrayCallBacks);
这实际上只是C ++中的一个问题,因为转换到void*
和从void*
进行转换要严格得多。在C中,{{1}}可以自由地转换为其他指针类型。