2016-06-17 4 views
0

にラムダからQStringListを返すことができません。私は、次のコードを使用してQT 5.7でコンボボックスを埋めるためにしようとしている:が機能

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'
問題は何?

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

問題は本当にエラーメッセージで与えられます:ラムダのインスタンスを 'addItems'に渡していて、それが何をするのかわかりません... –

答えて

1

addItemsは、QStringList、ないQStringListを生成ラムダを期待します関数。

+0

それはうまくいきますが、私は混乱しています...ラムダが価値を返すためにラムダに電話する必要はないと思った。とにかく、ありがとう! – 7Y3RPXK3ETDCNRDD

+0

@ 7Y3RPXK3ETDCNRDDラムダは値です - ファンクタのインスタンス - コンパイラ生成クラスです。あなたの場合、 'QStringList operator()()'メンバーを持つクラスのインスタンスになります。 'addItems'関数はそのクラスのインスタンスを必要とせず、' QStringList'のインスタンスを必要とします!ユーザー定義の変換はありません。クラスには '演算子QStringList()'はありません。 –

0

は(含める){}の最後で明示的にこのラムダを呼び出すために:あなたはQStringListを得るためにあなたのラムダを呼び出す必要がありますので、