我正在尝试重用其他项目中的代码,但是在复制这些类时,它在新项目中生成了一个编译器错误,但是当它在另一个项目中时,它运行得很好。
错误是
Cannot initialize a parameter of type 'const uint8_t *' (aka 'const unsigned char *') with an rvalue of type 'const void *'
,代码是
[outputStream write:[userdata bytes] maxLength:[userdata length]];
outputStream是一个NSOutputStream,userdata是一个NSData对象。 围绕此语句的相同代码用于两个项目中。
两个项目都针对相同的目标操作系统(iOS 5.0)和archetecture(armv7)进行编译,并且两者都添加了相同的框架。
我还尝试清理项目,然后重新构建它。同样的问题。
任何帮助都将不胜感激。
答案 0 :(得分:3)
最后,通过演员解决了这个问题:
[outputStream write:(const uint8_t *)[userdata bytes] maxLength:[userdata length]];
然后进行清理和构建(不进行清理,会出现不同的错误。)
答案 1 :(得分:2)
我猜测旧项目正在使用GCC编译器,而新项目正在使用LLVM。所以错误来自Clang前端。如果您将编译器更改为GCC或LLVM GCC,它应该会消失。
答案 2 :(得分:0)
是的,铸造是需要的,最好的方法是:
[outputStream write:static_cast<const uint8_t *>([userdata bytes]) maxLength:[userdata length]];