Возможный дубликат:
GCC std :: поток не найден в пространстве имен std
Я ожидал, что этот код скомпилируется в gcc, но это не так. Я использую Mingw 4.7.0. Я вижу заголовок, но классы, кажется, не существуют. Какие флаги мне нужны? я управлял этим с
g++ -std=gnu++11 main.cpp
Код
#include<atomic>
#include<thread>
#include<iostream>
using namespace std;
atomic<int> a1,a2,a3;
void test(){
cout<<"run";
}
int main(){
thread t(test);
t.join();
}
Ошибка, которую я получаю — поток не существует. В моем другом коде также написано, что std :: this_thread :: yield () не существует. MSVC11 компилирует это нормально
MingW-реализация GCC не является полной по отношению к C ++ 11. Вы можете либо: 1) подождать, 2) исправить это самостоятельно (с открытым исходным кодом!), Либо 3) использовать другой компилятор. GCC просто использует pthreads для реализации стандартной функциональности потоков библиотеки, а в Windows их нет.
В Linux вы должны скомпилировать g++ -std=c++11 -pthread
заставить программу работать.
Это не единственный аспект MingW-порта GCC, который отсутствует. Еще один std::random_device
, который пытается открыть /dev/urandom
и предсказуемо терпит неудачу на Windows. По сути, кто-то должен переписать внутренности реализации с соответствующими примитивами Windows API, но я предполагаю, что этого еще никто не делал.
Других решений пока нет …