注意:'std :: thread'在头文件'<thread>'中定义;您忘记了“ #include <thread>”吗?

时间:2019-07-07 07:46:44

标签: c++ multithreading c++11 g++

我尝试在c ++中编译一个简单的c ++代码,但是当我尝试在Windows中使用g ++对其进行编译时,总是会返回错误。

我使用

g++ -std=c++0x -pthread main.cpp

错误消息是:

std::thread' is defined in header '<thread>'; did you forget to '#include <thread>'?

这没什么意义,因为代码只是

#include<thread>

void f(int i) {}

int main() {
        std::thread t(f, 1);
        t.join();
        return 0;
}

我相信此代码可在linux上运行,我想知道为什么它无法在Windows下运行。

2 个答案:

答案 0 :(得分:5)

要使用std::thread,您必须将代码编译为C ++ 11,C ++ 14或C ++ 17。

您正在将-std=c++0x传递给gcc。 c++0x是gcc C ++ 11实现的预发行版本的名称,并且取决于您的编译器版本,该名称可能不完整。

将您的gcc命令行更改为-std=c++11,很可能情况会更好。如果没有,您可能需要获取较新版本的编译器。

答案 1 :(得分:0)

Windows有其自己的非POSIX标准的线程API。您需要找出的是(如何获取以及)如何为编译器链接线程库。听起来您正在使用MinGW?我使用MSVC,它会自动与Windows线程库链接。不幸的是,我不知道如何为MinGW执行此操作,因此这不是最佳答案,但这是一个可以帮助您入门的链接:

Does MinGW-w64 support std::thread out of the box when using the Win32 threading model?