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

A pointer to a std::promise causing problems

本文关键字:指针 问题 std promise 指向      更新时间:2023-10-16

我得到以下错误

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;
}

我理解"void value not ignore "通常意味着你试图在不合适的地方使用void值,但我在这个例子中看不到。

你有*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)不行。