我收到以下错误
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 ignored”通常意味着您正尝试在不合适的地方使用 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)
不行。
关于c++ - 指向导致问题的 std::promise 的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23713272/