【发布时间】: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