2014-05-17 2 views
0

나는이 코드에서 다음과 같은 오류성병 :: 약속에 대한 포인터의 원인이 문제

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)은 그렇지 않습니다.