2014-05-17 18 views
0

我是從這個代碼收到以下錯誤一個指向一個std ::承諾造成的問題

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值,但在這個例子中我看不到這個值。

+0

拿地址'&pr'完全不可行。 –

+0

(但句法上你只想'ptr-> set_value(true);'。) –

+0

@KerrekSB謝謝,問題解決了。而不是使用&pr我用std :: promise * pr = new std :: promise ();所以我可以直接傳遞指針,然後刪除*做到了。涼。 – Gottfried

回答

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)不。