2017-09-14 81 views
-1

我有以下设置:无法转换括号内的初始化列表中的std ::一对的std ::地图

typedef std::function<void()> reaction; 

class Node 
{ 
    public: 
    ... 

    private: 
    void connect(); 
    void receive(); 

    private: 
    const std::map<std::pair<Status, Event>, reaction> TransTable = { 
     {{DISCONNECTED, CONNECT}, &Node::connect}, 
     {{CONNECTING, RECEIVE}, &Node::receive} 
    }; 
} 

但我总是得到错误:

error: could not convert from <brace-enclosed initializer list> to const std::map<std::pair<Status, Event>, std::function<void()> > 

什么是错的与我的initalizer名单?

+0

什么是“反应”?它没有被定义,所以错误来自于此。 –

+0

抱歉忘记了包括它 – Reza

回答

3

您的问题缺少MCVE,但是错误信息已足够清楚:reaction似乎是std::function<void()>的typedef。成员函数指针如&Node::connect不能转换为std::function<void()>,因为后者缺少任何实际调用函数的this参数。

你可以,但是,使用lambda表达式来捕获和存储当前初始化这个TransTable成员实例:

const std::map<std::pair<Status, Event>, reaction> TransTable = { 
    {{DISCONNECTED, CONNECT}, [this] { connect(); }}, 
    {{CONNECTING, RECEIVE}, [this] { receive(); }} 
}; 
相关问题