指向导致问题的std :: promise的指针

时间:2014-05-17 15:48:46

标签: c++ multithreading

我收到以下错误

error: void value not ignored as it ought to be
    *ptr->set_value(true);
make: *** [make] Error 1

来自此代码

std::vector<std::promise<bool>*> prs;

void xyz(){
    std::promise<bool> pr;  
    prs.push_back(&pr); 
    std::future<bool> f = pr.get_future();  
    bool result = f.get();
}

void foo(void){
    std::thread t(xyz);
    std::this_thread::sleep_for(std::chrono::milliseconds(5));
    for(std::promise<bool>* ptr: prs){
        *ptr->set_value(true); 
    }
    t.join();
}

int main(void){
    foo();  
    return 0;
}

我理解&#34;虚假价值不被忽视&#34;通常意味着你试图在不合适的情况下使用空值,但在这个例子中我无法看到。

1 个答案:

答案 0 :(得分:4)

您有*ptr->set_value(true)

C ++的优先规则使这个语句成为*(ptr->set_value(true))

set_value()返回void。你无法尊重void


您可能想要(*ptr).set_value(true)ptr->set_value(true)。无论哪种方式都有效,但*ptr->set_value(true)没有。