相同的代码会在一个项目中生成错误,但不会生成另一个

时间:2012-01-27 20:53:50

标签: objective-c ios ios5

我正在尝试重用其他项目中的代码,但是在复制这些类时,它在新项目中生成了一个编译器错误,但是当它在另一个项目中时,它运行得很好。

错误是

    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)进行编译,并且两者都添加了相同的框架。

我还尝试清理项目,然后重新构建它。同样的问题。

任何帮助都将不胜感激。

3 个答案:

答案 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]];