为什么我会收到此错误:'thread'不是'std'的成员?

时间:2014-01-30 15:38:39

标签: 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)已经足够了。出了什么问题?

1 个答案:

答案 0 :(得分:2)

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 a member of 'std'问题提供了两种可能的解决方案:

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