2009-06-04 53 views
0

我有关于max和sqrt的问题C++数学函数问题(在Linux下)

如果我包含math.h,它找不到sqrt。

所以我查看cmath头文件,里面包含math.h,但是当我尝试打开math.h时,它说没有找到该文件。所以ithink我的math.h在Linux中缺失。

+0

在linux中,你几乎总是会在/usr/include/math.h找到它。你确定它不在吗?它作为glibc或glibc-headers软件包的一部分安装在许多发行版中。 – jmanning2k 2009-06-04 15:25:15

回答

5

对不起,我找到了答案。

我只需要它这样写:

的std ::最大 的std ::开方

但为什么它不工作 “的std ::” 在Windows操作系统?

+2

这取决于你的编译器。有些不能将C标准库中的函数正确放置到std名称空间中。 – 2009-06-04 14:39:23

+3

我认为windows.h头文件定义最小和最大值为宏。在包含所述文件之前,可以通过定义NOMINMAX来禁用它们。 – 2009-06-04 16:08:09

4

注: 在C++中,你应该#包括< CMATH>不#包括< math.h>中

注: 还指定命名空间是一个很好的做法

1

您的系统可能有C头文件在文件系统中的一个地方,而在另一个地方是C++头文件。您是否熟悉搜索系统头文件的实际目录列表? (实际上,实现并不需要系统头文件,尽管我熟悉的都是系统头文件,C++标准对语句#include <cmath>必须做的事情有要求,但不是必须要做的。)

在您的回答中,您将讨论Linux和Windows上的C++之间的差异。这些不是特定于操作系统的,而是特定于实现的。你可能在Windows上使用Visual C++,在Linux上使用其他的(如果只是因为VC++只在Windows上运行)。它们在默认配置中可能会有不同的工作。

事实上,#include <math.h>应该像#include <cmath>,除了math.h应该将其所有函数名称等移入std :: namespace。如果在您的Linux C++系统中没有发生这种情况,则存在问题。不幸的是,你没有提供足够的信息来弄清楚发生了什么。

3

这有可能是你并不需要使用std原因::以前,是因为地方的headerfile下面的语句写:

using namespace std; 

这份声明中,后“的std ::”前缀不再是必要的。

希望这个澄清的东西...