2013-10-03 43 views
6

嘗試使用的XCode 5使用64位iPhone 5S

Use of undeclared identifier 'FLT_EPSILON' 

我已經查看過,FLT_EPSILON(它顯示在Xcode棕色)建立我的項目時,我收到以下錯誤「FLT_EPSILON」 ,在「float.h」文件中定義。

我在做什麼錯?


這是其中使用FLT_EPSILON的代碼:

if (someTimeInterval < 0.03 - FLT_EPSILON) { 
    someTimeInterval = 0.1; 
} 

我想通了,這是存在的,因爲我試圖測試它在iPhone 5S模擬器(64位) 。

我不太瞭解使用64位模擬器時的差異。 我應該包括什麼,而不是FLT_EPSILON - 爲什麼它不適用於64位?

+0

你是否包含「float.h」? – user1118321

+0

爲了澄清,「float.h」是iOS SDK的一部分,所以我假設我不需要包含它。並且這在Xcode 4上正常工作。 – GangstaGraham

+0

@ user1118321查看更新後的問題 – GangstaGraham

回答

1

我不知道爲什麼這不適用於64位設備。

但這裏的解決方案:

確保已安裝MobileCoreServices.framework,然後它應該工作的罰款

進口<MobileCoreServices/MobileCoreServices.h>

+0

沒有爲我工作 –

2

這爲我工作:

#ifndef FLT_EPSILON 
    #define FLT_EPSILON __FLT_EPSILON__ 
#endif 

(這是怎麼回事在float.h中定義)

3

解決方法是在項目中禁用模塊。要做到這一點,去構建設置並將「啓用模塊」設置爲「否」。

這是一個clang錯誤。模塊(-fmodules標誌)仍然是實驗性功能,當您混合使用Objective-C和C/C++模塊時,可能會出現一些錯誤。

見在github上我的演示項目:TestEpsilon

第一個目標使用的模塊,第二個沒有。爲了確保我們獲得了「清潔」版本,我在預生成腳本中添加了DerivedDataModulesCache清理。