event
- это функция, а не поле, поэтому
event(func)
- невалидная конструкция для списка инициализации (тебе компилятор об этом и говорит)
Если хочешь, чтобы вызываемая функция инициализировалась в конструкторе, то храни само поле функции и внутри
event()
ее вызывай. Примерно так:
class menu_item
{
public:
menu_item(std::string name, std::function<void()> func) : _name(name), _func(func)
{
}
void event()
{
_func();
}
std::string const& name = _name;
private:
std::string _name;
std::function<void()> _func
};