不完整类型 '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

[C++11 多线程异步] --- std::promise/std::future

异常传播和 std::future