【问题标题】:Including <thread> results in the following compile error: 'fabsl': is not a member of '`global namespace'包含 <thread> 会导致以下编译错误:'fabsl': is not a member of '`global namespace'
【发布时间】:2021-05-29 15:25:20
【问题描述】:

很长一段时间以来,标准库通过简单地包含编译错误就让我很头疼。长期以来,我通过重新实现我需要的部分或为 cstdio 使用一些#define 来解决它。

现在我需要包含该库,但我真的没有看到任何解决方法。再一次,我也看不出有什么办法——有什么线索可以解决吗?我尝试了以下方法:

#ifndef _CRT_FUNCTIONS_REQUIRED
#define _CRT_FUNCTIONS_REQUIRED 1
#endif // !_CRT_FUNCTIONS_REQUIRED
#include <thread>

还有一些这样的变化,但无济于事。

编辑 - 已修复: 我创建了一个“Math.h”头文件,破坏了任何依赖于标准 C++ 库“math.h”的头文件。重命名标题(及其引用)后,编译的代码。

【问题讨论】:

  • 您的问题缺少一些细节(例如哪个编译器/平台),但如果您的编译器将 C std:: 命名空间中的运行时内容。
  • 请创建一个minimal reproducible example,包括足以展示问题的代码以及对编译器及其选项的完整描述。
  • 我正在使用 MSVC 编译器,为 Windows 构建。处理最小的例子。
  • 您的编译器安装中出现了问题,或者代码正在执行您未显示的操作。但是,从您的第一句话来看,编译器安装肯定有问题。
  • 感谢您的反馈,以后会尝试更详细的。试图重现最小的可重现示例,但收效甚微,我终于猜到了这个问题——我选择将文件命名为与标准 C++ 库中包含的文件相同的文件。我是个笨蛋。感谢您引导我找到这个@alterigel

标签: c++ include


【解决方案1】:

我创建了一个 Math.h 头文件。重命名它可以解决问题。

避免使用 C++ 标准库中的文件名似乎是个好主意,谁会这么说呢。

【讨论】:

  • 是的,那是在玩火。如果它是字面上的“Math.h”,带有一个大写字母,在 Unix 系统上可能不会有问题,但在 Windows 上会很麻烦。不同之处在于 Unix 文件系统区分大小写,因此“Math.h”和“math.h”命名了两个不同的文件。在 Windows 上,它们是同一个文件。
猜你喜欢
  • 2014-07-17
  • 2012-12-10
  • 2018-03-15
  • 2018-05-02
  • 1970-01-01
  • 2015-01-14
  • 2020-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多