2012-01-27 95 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]]; 
相關問題