我收到以下错误
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;通常意味着你试图在不合适的情况下使用空值,但在这个例子中我无法看到。
答案 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)
没有。