无法转换std :: Pair in std :: map中的括号封闭的初始化列表



我有以下设置:

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()> >

我的Intalizer列表有什么问题?

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

但是,您可以使用lambdas捕获和存储当前初始化此TransTable成员的实例:

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

最新更新