【问题标题】:'thread' is not a member of 'std' in Eclipse Neon with MinGW 6.3 GCC on Windows在 Windows 上使用 MinGW 6.3 GCC 的 Eclipse Neon 中,“thread”不是“std”的成员
【发布时间】:2018-01-07 07:58:00
【问题描述】:

我收到错误“线程不是 std 的成员”。我已经尝试了我在网上找到的所有解决方案,但到目前为止都没有奏效。我尝试将 -pthread 和 --std=c++11 添加到编译器和链接器选项以及编译器规范,并将语言标准设置为 ISO C++11。我正在使用带有 minGW 6.3.0-1 的 Eclipse neon.3,并且我已经更新了我的所有包。

代码确实可以运行,但如果可能的话,我想摆脱错误。 (编辑:我错了。尽管出现错误,但我选择“继续启动”时,它正在运行在我使用 std::thread 之前编译的代码。当前代码没有运行。)

我需要不同版本的 mingw 吗?我应该切换到 mingw-w64 吗?

这是我的工具链,供参考:

GCC 汇编器

GCC 存档器

GCC C++ 编译器

GCC C 编译器

MinGW C 链接器

MinGW C++ 链接器

以及给出此错误的简单代码:

#include <thread>
#include <iostream>

void call_from_thread() {
    std::cout << "Hello!" << std::endl;
}

int main() {
    std::thread t1(call_from_thread);
    return 0;
}

【问题讨论】:

  • 什么版本的g++,你有没有在编译开关中添加-std=c++11
  • “代码确实运行”是什么意思?如果线程未定义为std的成员,它不应该编译失败吗?你的头文件有问题吗?
  • @RichardCritten gcc 自 6.1 起默认启用 c++14
  • @patatahooligan 当我运行它时,它会通知我存在错误,我选择“继续启动”
  • Mingw32 不支持 std::thread。见stackoverflow.com/questions/17242516/…。您可以切换到 mingw64+winpthread(但 TLS 在该配置中完全被破坏)或使用 Boost.thread。

标签: c++ eclipse c++11 gcc mingw32


【解决方案1】:

使用您的示例代码重现该错误的唯一方法是不包含 --std=c++11 开关。我在您的文字中注意到您在开关前只放了一个破折号,这可能是您的问题吗?试试两个破折号。

我在这里转载了:

https://godbolt.org/g/GQFTc9

编辑:顺便说一句,您在评论中说:

当我运行它时,它会通知我存在错误,我选择“继续启动”

这是运行先前编译的结果,它不仅仅是继续并忽略错误。

【讨论】:

  • 我知道它正在运行以前编译的结果,这就是为什么我的帖子说“......它正在运行之前编译的代码......”缺少的连字符是一个错字,我的错。
【解决方案2】:

根据 sbabbi 的建议,“Mingw32 不支持 std::thread。...您可以切换到 mingw64+winpthread(但 TLS 在该配置中完全被破坏)或使用 Boost.thread。”,我决定设置 Boost 并改用它。我还切换到 cygwin,因为它内置了 Boost 库,而我切换到 Netbeans,因为在 eclipse 中安装 Boost 被证明是不必要的困难。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 2018-04-10
    • 1970-01-01
    • 2019-09-29
    • 2011-09-28
    相关资源
    最近更新 更多