2016-04-24 4 views
0

Я практиковал std::asyn функцию, которая введена в C++ 11, я написал простой примерcoudn't код запуска используется зЬй :: асинхр на GCC 5.3.0

#include<future> 
#include<iostream> 

using namespace std; 

void check() 
{ 
    cout<<"some"<<endl; 
} 
int main() 
{ 
    auto p=std::async(std::launch::async,check); 
    p.get(); 
} 

Да очень просто, чтобы начать с и я компиляции с помощью GCC 5.3.0

g++ -std=c++11 practise.cpp -lpthread

и ошибку

practise.cpp: In function 'int main()': 
practise.cpp:13:47: error: invalid use of incomplete type 'class std::future<int>' 
    auto p=std::async(std::launch::async,chech); 
              ^
In file included from practise.cpp:1:0: 
C:/Program Files/mingw32/i686-w64-mingw32/include/c++/future:115:11: note: declaration of 'class std::future<int>' 
    class future; 
     ^

Я что-то пропустил? это способ, которым я связал lpthread в порядке? я нахожусь на окнах 7.

ответ

1

Ваша проблема очень похожа на одну из этого SO:

c++11 std::async doesn't work in mingw

Вы должны проверить, что gcc -v возвращается к «модели резьбы:». В приведенном выше SO он возвращает win32 - и, вполне возможно, mingw по-прежнему не поддерживает async/future в этом режиме.

В моей установке mingw - также 5.3.0, у меня есть Thread model: posix. Я проверил те же самые фреймы компиляции, что и ваши, и ваш пример всегда компилируется отлично.

Так что я предлагаю вам сначала проверить модель резьбы с помощью gcc -v, если это не posix, а затем переустановить mingw с потоками posix. Вы выбираете модель нитей при запуске установщика mingw-w64-install.exe/

+0

"https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/5.3 .0/threads-posix/seh/"это может быть правильный пакет для меня –

+1

Я использовал онлайн-установщик отсюда: https://sourceforge.net/projects/mingw-w64/. – marcinj

 Смежные вопросы

  • Нет связанных вопросов^_^