7

尝试使用 XCode 5 构建项目时出现以下错误。

Use of undeclared identifier 'FLT_EPSILON'

我已经检查过了,FLT_EPSILON(它在 Xcode 中显示为棕色)是在“float.h”文件中定义的。

我究竟做错了什么?


这是使用 FLT_EPSILON 的代码:

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

我发现这是因为我试图在 iPhone 5S 模拟器(64 位)上测试它。

我不太了解使用 64 位模拟器时的区别。我应该包括什么而不是 FLT_EPSILON - 为什么它不适用于 64 位?

4

3 回答 3

3

解决方案是禁用项目中的模块。为此,请转到构建设置并将“启用模块”设置为“否”。

那是一个clang错误。模块(-fmodules标志)仍然是实验性功能,当您混合使用 Objective-C 和 C/C++ 模块时,可能会出现一些错误。

在 github 上查看我的演示项目:TestEpsilon

第一个目标使用模块,第二个没有。为了确保我们得到“干净”的构建,我在预构建脚本中添加DerivedData和清理。ModulesCache

于 2014-02-25T12:01:15.753 回答
2

这对我有用:

#ifndef FLT_EPSILON
    #define FLT_EPSILON __FLT_EPSILON__
#endif

(这就是它在 中的定义float.h

于 2013-11-08T22:12:16.470 回答
1

我不知道为什么这不适用于 64 位设备。

但这是解决方案:

确保已安装 MobileCoreServices.framework,然后它应该可以正常工作

进口<MobileCoreServices/MobileCoreServices.h>

于 2013-10-22T22:11:51.613 回答