c++ - 为什么我会收到此错误 : 'thread' is not a member of 'std' ?

标签 c++ c++11 mingw

我正在使用 Code::Blocks 13.12 和 TDM-GCC(4.7.1 版,32 位)。当我尝试使用线程类时,出现以下错误: 'thread' is not a member of 'std'

我确定#include <thread> .我启用了编译器标志 -std=c++11告诉编译器符合 C++11 标准。

我想也许我的GCC版本不够新,所以我安装了TDM-GCC 4.8.1;当我使用它的编译器时,我没有这个问题。然而,然后我读到 GCC 版本低至 4.4 支持 C++11 线程类,这意味着我拥有的 GCC 原始版本 (4.7.1) 已经足够最新了。出了什么问题?

最佳答案

MinGW(包含在 TDM-GCC 中)带有两个线程 API 之一:winpthreads(基于 POSIX 线程 API,pthreads)或 Win32 线程 API。如果你有一个带有 Win32 线程 API 的版本,std::thread 是 disabled . TDM-GCC 4.7.1 使用 Win32 线程 API,而 TDM-GCC 4.8.1 及更高版本带有 winpthreads。这就是编译器在一种情况下成功但在另一种情况下失败的原因。

对于 'thread' is not member of 'std' 问题,这导致了 2 种可能的解决方案:

  • 安装一个使用 winpthreads 的 TDM-GCC 版本(独立的或与 Code::Blocks 一起使用)。这意味着 4.8.1 或更高版本。
  • 使用MinGW installer ,它允许您选择要安装的线程 API。它还允许您选择要安装的 MinGW 版本(现在对应于包含的 GCC 版本),因此您甚至可以选择较旧的版本,例如 4.7.3,它比 4.8.1 更稳定。

关于c++ - 为什么我会收到此错误 : 'thread' is not a member of 'std' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21460817/

相关文章:

c++ - 如何清理 C++ 编译器命令?

windows - Windows 7 上的 Make 命令失败 : recipe for target 'all-recursive' failed

gcc -\mingw32\bin\ld.exe : cannot find -lC:/msys/1. 0/opt/tcl/lib

c++ - 如何将 GLEW 与 MinGW 一起使用

c++ - 编译器似乎找不到 boost/shared_ptr.hpp

c++ - 将文本文件的内容放入 QMessageBox

c++ - 将 typedef 用于 unique_ptr 模板

c++ - 在 Windows 7 中创建 POSIX 应用程序?

c++ - cpp中 "[=]"是什么意思

c++ - 在 std::set 中查找对象时出错