0

我在练习std::async++11中引入的函数,我写了一个简单的例子

#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 的方式可以吗?我在 Windows 7 上。

4

1 回答 1

1

您的问题看起来与此 SO 中的问题非常相似:

c++11 std::async 在 mingw 中不起作用

您应该检查gcc -v“线程模型:”的返回值。在上面的 SO 中,它返回 win32 - 很可能 mingw 在这种模式下仍然不支持异步/未来。

在我的 mingw 安装中——也是 5.3.0,我有Thread model: posix. 我检查了与您完全相同的编译标志,并且您的示例始终可以正常编译。

所以我的建议是你先用 gcc -v 检查线程模型,如果它不是 posix,然后用 posix 线程重新安装 mingw。您在运行 mingw-w64-install.exe 安装程序时选择线程模型/

于 2016-04-24T09:57:28.677 回答