【问题标题】:Why do I get this error: 'thread' is not a member of 'std'?为什么我会收到此错误:'thread' 不是 'std' 的成员?
【发布时间】:2014-02-23 00:16:15
【问题描述】:

我将 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)已经足够最新了。出了什么问题?

【问题讨论】:

    标签: c++ c++11 mingw


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

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

    【讨论】:

    • 这会影响 MinGW64 吗?我似乎在那个网站上找不到任何东西表明他们没有解决这个问题。
    • @Mgetz 我不能给你一个明确的答案,但我相信我的答案适用于 MinGW 32 位和 64 位。无论我在最新的 MinGW-builds 安装程序中选择哪个版本(4.7.x 或 4.8.x)和架构(“x32”或“x64”),它仍然让我可以选择任一线程 API。不过,我不知道您指的是哪个网站,也不知道“尚未解决此问题”中的“此问题”是什么意思。
    猜你喜欢
    • 1970-01-01
    • 2018-06-22
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    相关资源
    最近更新 更多