2013-10-03 1 views
6

sto ottenendo il seguente errore quando si cerca di costruire il mio progetto utilizzando XCode 5.Usando 'FLT_EPSILON' per 64 bit iPhone 5S

Use of undeclared identifier 'FLT_EPSILON' 

Ho controllato, e FLT_EPSILON (si presenta marrone in Xcode) , è definito nel file "float.h".

Cosa sto sbagliando?


Questo è il codice in cui viene utilizzato FLT_EPSILON:

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

ho capito che questo stava accadendo perché stavo cercando di verificare il lavoro svolto sul simulatore iPhone 5S (64 bit) .

Non capisco molto bene le differenze quando si utilizza il simulatore a 64 bit. Cosa devo includere invece di FLT_EPSILON - e perché non funziona con 64 bit?

+0

Stai includendo "float.h"? – user1118321

+0

Per chiarire, "float.h" fa parte dell'SDK di iOS, quindi presumo di non doverlo includere. E questo funzionava correttamente su Xcode 4. – GangstaGraham

+0

@ user1118321 vedere la domanda aggiornata – GangstaGraham

risposta

1

Non so perché questo non ha funzionato solo per dispositivi a 64 bit.

Ma ecco la soluzione:

accertarsi che sia installato MobileCoreServices.framework, e quindi dovrebbe funzionare bene

Import <MobileCoreServices/MobileCoreServices.h>

+0

Non ha funzionato per me –

2

Questo ha funzionato per me:

#ifndef FLT_EPSILON 
    #define FLT_EPSILON __FLT_EPSILON__ 
#endif 

(questo è come è definito in float.h)

3

La soluzione è disabilitare i moduli nel progetto. Per fare questo, vai a costruire impostazioni e impostare "Abilita moduli" su "No".

Questo è un bug clang. I moduli (flag -fmodules) sono ancora sperimentali e quando si mischiano i moduli Objective-C e C/C++ ci possono essere alcuni bug.

Vedi il mio progetto dimostrativo a github: TestEpsilon

moduli First uso di destinazione, la seconda no. Per assicurarci di avere una build "pulita" ho aggiunto DerivedData e ModulesCache cleanup in script pre-build.