C++数学函数题(Linux下)
Posted
技术标签:
【中文标题】C++数学函数题(Linux下)【英文标题】:C++ math functions problem (under Linux) 【发布时间】:2009-06-04 14:25:42 【问题描述】:我遇到了关于 max 和 sqrt 的问题
如果我包含 math.h,它将找不到 sqrt。
所以我查看了 cmath 头文件,其中包含 math.h,但是当我尝试打开 math.h 时,它说找不到该文件。所以我认为我的 math.h 在 Linux 中丢失了。
【问题讨论】:
在 linux 中,您几乎总能在 /usr/include/math.h 中找到它。你确定它不在那里吗?它作为 glibc 或 glibc-headers 包的一部分安装在许多发行版上。 【参考方案1】:抱歉,我找到了答案。
我只需要这样写:
标准::最大值 std::sqrt
但是为什么在 Windows 操作系统下没有“std::”它可以工作?
【讨论】:
这取决于你的编译器。有些没有正确地将 C 标准库中的函数放入 std 命名空间。 我认为 windows.h 头文件将 min 和 max 定义为宏。可以通过在包含所述文件之前定义 NOMINMAX 来禁用它们。【参考方案2】:注意:
在 C++ 中,你应该 #include
注意: 指定命名空间也是一个好习惯
【讨论】:
我认为最好说明为什么sombody必须做某事,而不是仅仅命令它【参考方案3】:您以前不需要使用 std:: 的原因可能是因为在头文件的某处写了以下语句:
using namespace std;
在此语句之后,'std::' 前缀不再是必需的。
希望这能澄清一些事情......
【讨论】:
【参考方案4】:您的系统可能在文件系统的一个位置有 C 标头,而在另一个位置有 C++ 标头。您是否熟悉搜索系统标头的实际目录列表? (实际上,实现不需要有系统头文件,虽然我熟悉的都有。C++标准对#include <cmath>
语句必须做什么有要求,但对如何做没有要求.)
在您的回答中,您谈到了 Linux 和 Windows 上的 C++ 之间的差异。这些不是特定于操作系统的,而是特定于实现的。您可能在 Windows 上使用 Visual C++,在 Linux 上使用其他东西(如果只是因为 VC++ 仅在 Windows 上运行)。它们在默认配置中的工作方式可能不同。
事实上,#include <math.h>
应该类似于#include <cmath>
,除了 math.h 应该将其所有函数名称等移动到 std:: 命名空间中。如果这在您的 Linux C++ 系统中没有发生,那么就有问题了。不幸的是,您没有提供足够的信息来弄清楚发生了什么。
【讨论】:
以上是关于C++数学函数题(Linux下)的主要内容,如果未能解决你的问题,请参考以下文章