2013-10-03 8 views
6

otrzymuję następujący błąd, gdy próbuje zbudować mojego projektu przy użyciu Xcode 5.Korzystanie 'FLT_EPSILON' dla 64-bitowych iPhone 5S

Use of undeclared identifier 'FLT_EPSILON' 

Sprawdziłem i FLT_EPSILON (pokazuje się brązowy w Xcode) jest zdefiniowany w pliku "float.h".

Co robię źle?


Jest to kod, gdzie jest używany FLT_EPSILON:

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

zorientowali się, że było to miejsce, ponieważ starałem się przetestować go na symulatorze iPhone 5S (64 BIT) .

Nie rozumiem zbyt dobrze różnic w korzystaniu z symulatora 64-bitowego. Co powinienem dołączyć zamiast FLT_EPSILON - i dlaczego nie działa z 64 bitami?

+0

Czy dołączasz "float.h"? – user1118321

+0

Aby wyjaśnić, "float.h" jest częścią zestawu SDK iOS, więc zakładam, że nie muszę go uwzględniać. I to działało poprawnie na Xcode 4. – GangstaGraham

+0

@ user1118321 zobacz zaktualizowane pytanie – GangstaGraham

Odpowiedz

1

Nie wiem, dlaczego to nie działało tylko dla urządzeń 64-bitowych.

Ale oto rozwiązanie:

Upewnij MobileCoreServices.framework jest zainstalowany, a następnie powinien działać dobrze

Importuj <MobileCoreServices/MobileCoreServices.h>

+0

Nie działa dla mnie –

2

Ten pracował dla mnie:

#ifndef FLT_EPSILON 
    #define FLT_EPSILON __FLT_EPSILON__ 
#endif 

(tak to jest zdefiniowane w float.h)

3

Rozwiązaniem jest wyłączenie modułów w projekcie. Aby to zrobić, przejdź do ustawień kompilacji i ustaw "Włącz moduły" na "Nie".

To jest błąd clang. Moduły (-fmodules flag) nadal są funkcjami eksperymentalnymi, a po połączeniu modułów Objective-C i C/C++ mogą wystąpić pewne błędy.

Zobacz mój projekt demo na github: TestEpsilon

pierwszych modułów użytku docelowego, drugi NO. Aby upewnić się, że mamy "czystą" kompilację, dodałem czyszczenie DerivedData i ModulesCache w skryptach pre-build.

Powiązane problemy