2014-12-02 22 views
0

我的代碼如下所示:compare_exchange_weak()編譯錯誤?

void C::addB(std::atomic<B>& b) 
{ 

    B* b2 = b.load(); 
    B newValue = B(); 

    bool result = b.compare_exchange_weak(b2, newValue, std::memory_order_relaxed, std::memory_order_release); 

} 

和編譯器不斷抱怨簽名不匹配compare_exchaneg_weak的三名成員重載形式:

note: candidate expects 3 arguments, 4 provided

+1

灌裝和改變b2'的'類型'B',[這編譯正確](http://coliru.stacked-crooked.com/a/a5456b5fa5fe1bd2)。也許你的標準庫實現有問題? – Casey 2014-12-02 18:24:19

回答

3

你的代碼給我的錯誤信息比你發佈的片段多得多。最相關的是

error: cannot convert ‘B’ to ‘B*’ in initialisation 
note: no known conversion for argument 1 from ‘B*’ to ‘B&’ 

表明您正在聲明一個指針,當你想要的對象:在空白

B b2 = b.load();