创建不可变的CFArray对象 – Apple示例不起作用

为了测试,我复制了以下示例代码[ https://developer.apple.com/library/ios/documentation/CoreFoundation/Conceptual/CFCollections/Articles/creating.html]并编译它:

#import  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”

为什么它不可编译以及如何实现它是可编译的?

CFArrayCreate()的第二个参数的类型是const void ** 。 因此,将呼叫更改为:

 anArray = CFArrayCreate(NULL, (const void **)strs, 3, &kCFTypeArrayCallBacks); 

这实际上只是C ++中的一个问题,因为它对于转换为void*要严格得多。 在C中, void*可以自由地转换为其他指针类型。