C++11:尝试通过async/future返回对时出错

C++11:尝试通过async/future返回对时出错,c++,c++11,asynchronous,future,C++,C++11,Asynchronous,Future,希望这只是我一个愚蠢的错误。这是我第一次尝试多线程,所以我不知道我在做什么 这是我的红黑树上有问题的代码: pair<unsigned long long, unsigned long long> ALTNode::height() { pair<unsigned long long, unsigned long long> hl(0,0), hr(0,0), f; future<pair<unsigned long long, unsign

希望这只是我一个愚蠢的错误。这是我第一次尝试多线程,所以我不知道我在做什么

这是我的红黑树上有问题的代码:

pair<unsigned long long, unsigned long long> ALTNode::height()  {
    pair<unsigned long long, unsigned long long> hl(0,0), hr(0,0), f;
    future<pair<unsigned long long, unsigned long long>> l, r;
    if (left)   
        l = async(std::launch::async,left->height());
    if (right)
        r = async(std::launch::async,right->height());
    if (left)
        hl = l.get();
    if (right)
        hr = r.get();
    f.first = ((hl.first < hr.first) ? hl.first : hr.first) + 1;
    f.second = ((hl.second > hr.second) ? hl.second : hr.second) + 1;
    return f;
}
以下是生成的错误:

错误1错误C2664:'std::pair::pairconst' std::pair&':无法从转换参数1 'std::_Do_call_ret::type'到 “const std::pairu_Ty1,_Ty2>和”G:\visualstudio 2012\VC\include\xrefwrap 431 1 ALT树


你能帮我吗

我猜想left->height是一个值,而不是std::async所要求的可调用实体。但是post的问题是它是一个递归函数吗?因为这是此特定函数的MCVE。不能是MCVE:左侧和右侧是未声明的标识符。让我们假设它们是ALTNode*指针。async接受一个可调用的对象—函数调用操作符可以应用于该对象。左->高度为成对-不可调用。很可能,您指的是类似asyncstd::launch::async,&ALTNode::height,左。