c++ - 指向导致问题的 std::promise 的指针

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

我知道“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/

相关文章:

c++ - 派生类的析构函数发生了什么?

c++ - 这个多余的 "typedef"是否严格合法?

c++ - 构建 Qt Static 5.3.2 时出错

c++ - std::set 在使用 std::set.erase 后包含重复元素

java - 两个线程在运行时如何通信?

c# - 使用带有后续 try-finally 子句的 ReaderWriterLockSlim.EnterXXX() 模式是否完全安全

c - pthread比 “default”版本慢

c++ - 我可以将使用 v120_xp 工具集构建的静态库链接到使用 VS2013 中的 v120 工具集构建的 EXE/DLL 吗?

python - QThread异常管理和线程竞争

iOS GCD 线程处理 - View Controller 已关闭