2016-06-17 53 views
0

我試圖填補QT 5.7使用ComboBox下面的代碼:無法從拉姆達返回QStringList中成函數

ui->comboBox_2->addItems([]() -> QStringList { 
     QDate date = QDate::currentDate(); 
     int current_year = date.toString("yyyy").toInt(); 
     QStringList year_list; 
     for (int i = 0; i <= 50; i++) { 
      year_list << QString::number(current_year - (50 - i)); 
     } 
     return year_list; 
    }); 

但它給我這個錯誤:no viable conversion from '(lambda at ..)' to 'const QStringList'
什麼問題?

+0

這個錯誤信息給出了問題:你將lambda的實例傳遞給'addItems',它不知道該怎麼處理它... –

回答

1

爲addItems需要一個QStringList中,沒有產生一個QStringList中,所以你要打電話給你的拉姆達得到QStringList中拉姆達:在{}顯式調用此拉姆達結束

ui->comboBox_2->addItems([]() { ... }()); 
+0

它可以工作,但我很困惑......我想你不需要調用lambda來返回值。不管怎麼說,多謝拉! – 7Y3RPXK3ETDCNRDD

+0

@ 7Y3RPXK3ETDCNRDD lambda是一個值 - 一個函子的實例 - 它是一個編譯器生成的類。在你的情況下,它將是一個具有'QStringList operator()()'成員的類的實例。 'addItems'函數不需要該類的實例,它需要'QStringList'的實例!沒有用戶定義的轉換,該類沒有'operator QStringList()'。 –