gpt4 book ai didi

c++ - M_PI 适用于 math.h 但不适用于 Visual Studio 中的 cmath

转载 作者:IT老高 更新时间:2023-10-28 12:03:24 29 4
gpt4 key购买 nike

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

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

#define _USE_MATH_DEFINES
#include <math.h>

它编译,而如果我写

#define _USE_MATH_DEFINES
#include <cmath>

它失败了

error C2065: 'M_PI' : undeclared identifier

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

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

最佳答案

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

我花了一些时间检查标题以查看是否有任何未定义的 _USE_MATH_DEFINES什么也没找到。

所以我搬了

#define _USE_MATH_DEFINES
#include <cmath>

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

尝试将它移到页面更高的位置。完全不确定为什么这会导致问题。

编辑:想通了。 #include <math.h>发生在 cmath 的 header 守卫中。这意味着#includes 列表中更高的内容包括cmath。没有 #define指定的。 math.h是专门设计的,因此您可以再次包含它,现在更改为添加 M_PI等等。 cmath 的情况并非如此。 .所以你需要确保你#define _USE_MATH_DEFINES在您包含其他任何内容之前。希望能为您解决问题:)

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

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

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

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com