从不兼容的类型'void *'分配'uint8_t *'(又名'unsigned char *')

时间:2012-11-16 11:27:52

标签: objective-c ios

 uint8_t *bufferPtr=NULL;
 size_t bufferPtrSize=0;
 bufferPtr=malloc(bufferPtrSize *  sizeof(uint8_t))

我在File1.m中使用了相同的代码它工作正常。当我在File2.mm上使用它时,它给出了assigning to 'uint8_t *' (aka 'unsigned char *' ) from incompatible type 'void *'错误。

1 个答案:

答案 0 :(得分:4)

这是因为.mm文件不被视为普通的Objective-C文件而是Objective-C ++文件,因此C ++的类型规则适用于此处。在C ++中,如果你决定有一个类型(在这种情况下你有一个void指针)然后想要另一个类型(在你的情况下是一个char指针),那么你必须显式地转换它们。执行此操作的方法是static_cast<T>(),其中T是目标类型。即:uint8_t *bufferPtr = static_cast<uint8_t *>(malloc(bufferPtrSize * sizeof(uint8_t)));