質問: 0, b }; int main() { struct testList { eTEST para; std::function func; }; std::vector list { { a, [&]() {return 1; } }, { b, [&]() {return 2; } } }; for (auto para : list) { std::cout << para.func() << std::endl; } return 0; } ``` vector と function の使い方が両方正しくないようで、 vector では `コンストラクター "std::vector<_Ty, _Alloc>::vector [代入_Ty=testList, _Alloc=std::allocator]" のインスタンスが引数リストと一致しません` というエラーが出ており、function でもいろいろエラーが出ています。 複数エラーが出てしまっているので、エラー一覧を画像で添付します。 どこか使い方を勘違いしているだけだとは思うのですが、しばらく調べても解決しなかったのでこちらで質問させていただきます。よろしくお願いします。 ![エラー一覧](https://i.stack.imgur.com/RFaSj.png) 検索用に文字列でも書いておきます。 ``` * E0289: コンストラクター "std::vector<_Ty, _Alloc>::vector [代入_Ty=testList, _Alloc=std::allocator]" のインスタンスが引数リストと一致しません * E0980: pointer-to-function 型に対する適切な operator() または変換関数のないクラス型のオブジェクトの呼び出しです * C2027: 認識できない型 'std::_Get_function_impl<_Fty>' が使われています。 * C2504: 'type': 定義されていない基底クラスが宣言されています。 * C2027: 認識できない型 'std::_Get_function_impl<_Fty>' が使われています。 * C3646: '_Mybase': 不明なオーバーライド指定子です * C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を規定値としてサポートしていません * C2440: '初期化中': 'initializer list' から 'std::vector >' に変換できません。 * C2064: 0 引数を取り込む関数には評価されません。 ```
回答: クラステンプレート `std::function` に渡す型パラメータが正しくありません。返り値の型だけではなく引数の型も指定する必要があります。 今回の場合、返り値が `int` 型の、引数を取らない関数を表したいので ``` std::function func; ``` としてください。 サンプルコードを Wandbox 上で実行できるようにしました。