不完整类型 'class std::future<int> 的无效使用
Posted
技术标签:
【中文标题】不完整类型 \'class std::future<int> 的无效使用【英文标题】:invalid use of incomplete type 'class std::future<int>不完整类型 'class std::future<int> 的无效使用 【发布时间】:2020-03-02 20:39:03 【问题描述】:我有一个错误
不完整类型 'class std::future 的无效使用
我用过 g++ -std=c++17
我的代码:
#include <iostream>
#include <iterator>
#include <memory>
#include <set>
#include <utility>
#include <vector>
#include <algorithm>
#include <numeric>
#include <future>
#include <future>
int sumTwoVectors(const vector<int>& one,
const vector<int>& two)
future<int> f = async([&]
return accumulate(begin(one), end(one), 0);
);
int result = accumulate(begin(two), end(two), 0);
return result + f.get();
int main()
cout << sumTwoVectors(1, 1, 1, 1, 3, 3, 3);
我用的是Win8.1
g++ -v
COLLECT_GCC=C:\Users\alex\gcc\bin\g++.exe COLLECT_LTO_WRAPPER=c:/users/alex/gcc/bin/../libexec/gcc/i686-pc-mingw32/9.2.0/lto-wrapper.exe 目标:i686-pc-mingw32 配置:../gcc-9.2.0-mingw/configure --host=i686-pc-mingw32 --build=x86_64-unknown-linux-gnu --target=i686-pc-mingw32 --prefix=/home /gfortran/gcc-home/binary/mingw32/native/x86_32/gcc/9.2.0 --with-gcc --with-gnu-as --with-gnu-ld --with-cloog=/home/gfortran/ gcc-home/binary/mingw32/native/x86_32/clog --with-gmp=/home/gfortran/gcc-home/binary/mingw32/native/x86_32/gmp --with-mpfr=/home/gfortran/gcc- home/binary/mingw32/native/x86_32/mpfr --with-mpc=/home/gfortran/gcc-home/binary/mingw32/native/x86_32/mpc --with-diagnostics-color=auto --enable-cloog- backend=isl --with-sysroot=/home/gfortran/gcc-home/binary/mingw32/cross/x86_32/gcc/9-20190310 --disable-shared --disable-nls --disable-tls --disable- libgcc2 --disable-win32-registry --enable-build-with-cxx --enable-libquadmath-support --enable-libquadmath --enable-languages=c,c++,fortran --disable-checking --enable-libgomp --enable-threads=win32 --enable-lto --enable-static --enable-shared=lto-plugin --enable-plugins --enable-ld=yes 线程型号:win32
【问题讨论】:
Works fine 当您添加所有缺少的包含时。 你开启C++11支持了吗? @alcoder 您显示的代码无法编译,但错误消息将非常不同。请显示(完整!)您实际验证的代码以提供错误消息,并以minimal reproducible example 的形式。 不,新代码still does not reproduce the problem。 @alcoder 您最近的编辑并没有解决我在之前的评论中提到的问题。同样,请在发布时发布您实际测试过的代码完全。 【参考方案1】:我认为问题在于线程模型。这是WIN32线程建模。使用 POSIX 线程建模。
【讨论】:
Why is “using namespace std;” considered bad practice?。答案应该是使用std::future
而不是future
。
这不是 OP 的问题。他们声称收到的错误消息与名称查找无关。
缺少std
会导致另一个截然不同的错误。像“future
没有命名类型”之类的东西
你是对的。我刚刚发布了编译器错误。我编辑了我的帖子。以上是关于不完整类型 'class std::future<int> 的无效使用的主要内容,如果未能解决你的问题,请参考以下文章
c++ 中的 std::promise 和 std::future
使用 std::future 和 std::async 的依赖求解器
并发 TS:std::future<...>::then,如何在不存储返回的未来的情况下保持链存活?
[C++11 多线程异步] --- std::promise/std::future