2017-03-18 62 views
1

我有這樣一段代碼在我的設置該設置對象的陣列上的一些lambda函數,用於當其值改變:如何訪問lambdas中的數組成員?

for(int i = 0; i < kNumFreqs; i++) 
{ 
    settings.freqs[i]->setChangeFunction([&](float newValue){ 
     DBG("filter" << i << ": " << newValue); 
     presetDirty = true; 
    }); 
} 

的問題是,拉姆達內部,i的值是垃圾。我該怎麼做呢?

謝謝。

回答

2

嘗試捕捉i按值,像這樣:

for(int i = 0; i < kNumFreqs; i++) 
{ 
    settings.freqs[i]->setChangeFunction([i](float newValue){ 
     DBG("filter" << i << ": " << newValue); 
     presetDirty = true; 
    }); 
} 

(拉姆達的[]之間的改變發生)

+1

這工作,但我還需要「這個」,所以就成了[我,這個]。謝謝。 – pizzafilms

+0

作爲一般性建議,始終明確寫出想要捕獲的內容是一種很好的做法。 – Telokis