примечание: 'std :: thread' определено в заголовке '<thread>';Вы забыли "#include <thread>"? - PullRequest
0 голосов
/ 07 июля 2019

Я пытаюсь скомпилировать простой код на С ++ на С ++, но продолжаю возвращать ошибки, когда пытаюсь скомпилировать его с помощью g ++ в Windows.

Я использую

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 ]

5 голосов
/ 07 июля 2019

Чтобы использовать std::thread, вы должны компилировать код как C ++ 11, C ++ 14 или C ++ 17.

Вы передаете -std=c++0x в gcc. c++0x было именем, использованным для предварительных версий реализации gcc C ++ 11 и, в зависимости от версии вашего компилятора, может быть неполным.

Измените командную строку gcc на -std=c++11, и, скорее всего, все будет работать лучше. Если нет, вам может потребоваться получить более новую версию компилятора.

0 голосов
/ 09 июля 2019

Windows имеет свой собственный API потоков, который не является стандартом POSIX. Что вам нужно выяснить, это (как получить и) как связать библиотеку потоков для вашего компилятора. Похоже, вы используете MinGW? Я использую MSVC, и он автоматически связывается с библиотеками потоков Windows. К сожалению, я не знаю, как это сделать для MinGW, так что это не лучший ответ, но вот ссылка, которая может помочь вам начать:

Поддерживает ли MinGW-w64 стандартную передачу std :: thread из коробки при использовании модели потоков Win32?

...