我正在使用 Visual Studio 2010。我读过在 C++ 中最好使用 <cmath> 而不是 <math.h>

但是在我尝试编写的程序中(Win32 控制台应用程序,空项目),如果我这样写:

#define _USE_MATH_DEFINES
#include <math.h>

它编译,而如果我写
#define _USE_MATH_DEFINES
#include <cmath>

它失败了



正常吗?我使用 cmath 还是 math.h 有关系吗?如果是,我怎样才能让它与 cmath 一起工作?

UPDATE :如果我在 GUI 中定义 _USE_MATH_DEFINES ,它就可以工作。任何线索为什么会发生这种情况?

最佳答案

有趣的是,我在我的一个应用程序上检查了这个,我得到了同样的错误。

我花了一段时间检查标题,看看是否有任何未定义的 _USE_MATH_DEFINES 并没有发现任何东西。

所以我移动了

#define _USE_MATH_DEFINES
#include <cmath>

成为我文件中的第一件事(我不使用 PCH,所以如果你是,你必须在 #include "stdafx.h" 之后使用它),然后它突然编译完美。

尝试将其向上移动到页面上方。完全不确定为什么这会导致问题。

编辑 :想通了。 #include <math.h> 出现在 cmath 的头部保护中。这意味着在#includes 列表中更高的部分包括 cmath,但没有指定 #definemath.h 是专门设计的,因此您可以再次包含它,现在定义更改为添加 M_PI 等。 cmath 不是这种情况。因此,在包含其他任何内容之前,您需要确保 #define _USE_MATH_DEFINES。希望可以为您解决问题:)

如果仅包含 math.h,则您正在使用非标准 C/C++,正如已经指出的那样:)

Edit 2 :或者正如大卫在评论中指出的那样,让自己成为一个定义值的常量,无论如何你都有更便携的东西:)

关于c++ - M_PI 适用于 math.h 但不适用于 Visual Studio 中的 cmath,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6563810/

10-12 23:52