在xcode中包含cmath get error:':: acos'尚未声明等

时间:2010-10-15 05:27:31

标签: c++ xcode cmath

尝试在Xcode中构建包含<cmath>的小而简单的项目时出现以下错误:

cmath: '*' has not been declared
'::acos' has not been declared
In file included from /Xcode4/Projects/libraryLAFMath/Classes/libraryLAFMath.cp
In file included from /Xcode4/Projects/libraryLAFMath/Classes/libraryLAFMath.h
'::acos' has not been declared in /Xcode4/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.1.sdk/usr/include/c++/4.2.1/cmath
...

错误日志也会抱怨所有其他数学函数sinpow等,而不仅仅是acos。我查看了cmath源代码,它引用了来自math.h的全局定义的相应数学函数,即::acos等。由于根错误抱怨::acos不存在一个人会认为找不到math.h,但a)它存在,并且b)我得到一个不同的错误,抱怨math.h找不到。

源代码如下:

libraryLAFMath.cp:

#include "libraryLAFMath.h"

libraryLAFMath.h:

#include <cmath>
struct libraryLAFMath {
    void test() {
        double a = std::acos(0);
    }
};

现在,我有一个来自外部源的另一个使用cmath的项目并且编译得很好。我尝试比较这两个项目之间的构建设置,但它们几乎相同。我正在使用LLVM GCC 4.2编译器,但在使用GCC 4.2时得到类似的结果,所以我认为这不是编译器设置问题。

我是Xcode开发的新手,感谢任何帮助。

2 个答案:

答案 0 :(得分:13)

我的项目中有一个名为Math.h且资本为M的文件,似乎编译器感到困惑并试图包含Math.h而不是math.h

答案 1 :(得分:2)

我在这个主题的另一个帖子上发布了这个答案,但是认为值得包括在这里:

我遇到了这个问题 - 它让我发疯,但我追查了原因,这与我在这个问题上所见的报道有点不同。

在这种情况下,一般的cmath标头(或math.h - 错误和解决方案发生在C ++或C中)具有架构环境开关,以包括特定于体系结构的数学子标头。架构开关(环境变量)还没有被定义,所以它正在发挥作用,实际上并没有包括真正定义数学函数的标题。

所以确实有一个math.h或cmath.h,它包含在内,但这还不足以获得数学函数。在我的例子中,我没有定义架构变量,而是找到了正确的子数学头的位置,并将它们添加到我的编译路径中。然后项目工作了!

这似乎是将Linux项目移植到OS-X时出现的问题。我想象在平台之间移动项目时可能会发生这种情况,以至于标准库标题的排列方式不同。