2012-01-27 72 views
3

我试图重复使用另一个项目中的代码,但在复制类时,它在新项目中生成了编译器错误,但是当它在另一个项目中时,它工作得很好。相同的代码在一个项目中生成错误,但不是另一个项目

该错误是

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对象。 两个项目中都使用围绕此语句的相同代码。

这两个项目都针对相同的目标OS(iOS 5.0)和archetecture(armv7)进行编译,并且都添加了相同的框架。

我也尝试清理该项目,并重新构建它。同样的问题。

任何帮助,将不胜感激。

+1

您是否尝试从编译器标志中删除-Werr,-Wall,-Wextra或-pedantic开关? – 2012-01-27 21:06:45

+0

我没有将它们添加到任何一个项目中,如果将它们添加到一个项目中,Xcode可能会将它们添加到两个项目中。 – magmastonealex 2012-01-28 00:32:29

+0

在很晚才跳过,并且遇到类似的问题,事实证明,如果没有人调用方法,则可能无法编译方法。所以可能有一个项目不会调用特定的代码,另一个可以。 [详细](http://stackoverflow.com/a/15213415/1179377)。 – Izhaki 2013-03-05 01:16:31

回答

3

最后,这是解决了铸造:

[outputStream write:(const uint8_t *)[userdata bytes] maxLength:[userdata length]]; 

然后用干净,并建立

+0

这对我有效。不需要清洁,我在LLVM 4.1上。 Xcode 4.5.2。 – justinkoh 2013-01-16 10:00:58

2

我猜测旧项目正在使用GCC编译器,而新项目正在使用LLVM。所以错误来自Clang前端。如果将编译器更改为GCC或LLVM GCC,它应该消失。

+0

不,他们都使用Apple LLVM 3.0。旧项目是在几周前的同一台计算机上使用相同版本的Xcode创建的。 – magmastonealex 2012-01-27 22:07:02

+0

在这种情况下,它可能是其他地方的错误。你有没有尝试评论导致错误和重建的路线? – 2012-01-28 00:25:52

+0

是的,我评论了该行,并编写代码(但当然,这是不起作用的) – magmastonealex 2012-01-28 01:06:24

0

是,铸造是什么(不清洗,它会拿出一个不同的错误。)需要,最好的办法是:

[outputStream write:static_cast<const uint8_t *>([userdata bytes]) maxLength:[userdata length]]; 
相关问题