为什么我的函数指针映射没有编译?

时间:2016-11-01 21:49:27

标签: c++

我有这堂课:

class TaskManager
{
public:
  TaskManager();
  ~TaskManager();

  using taskFunction = void (TaskManager::*)(BabelPacket const &);
  void executeTask(Task const &task);
  void signInTask(BabelPacket const &);
  void signUpTask(BabelPacket const &);
  void signOutTask(BabelPacket const &);
  std::map<unsigned int, taskFunction> actions =
   {
     {BabelPacket::Code::SIGN_IN, &TaskManager::signInTask},
     {BabelPacket::Code::SIGN_UP, &TaskManager::signUpTask},
     {BabelPacket::Code::SIGN_OUT, &TaskManager::signOutTask},
  };
}

这是我的枚举

struct      BabelPacket
{
  // Code enum
  enum struct   Code : unsigned int
  {
    NONE = 00,
    // Requests
    SIGN_IN = 100,
    SIGN_UP = 101,
    SIGN_OUT = 102,
  }
}

但是当我编译它时,我得到了:

   includes/TaskManager.hpp:38: error: could not convert ‘{{SIGN_IN, &TaskManager::signInTask}, {SIGN_UP, &TaskManager::signUpTask}, {SIGN_OUT, &TaskManager::signOutTask}}’ from ‘<brace-enclosed initializer list>’ to ‘std::map<unsigned int, void (TaskManager::*)(const BabelPacket&)>’
       };
   ^

知道为什么?

1 个答案:

答案 0 :(得分:1)

由于您的枚举为class enum,因此无法自动转换为int。要么使用常规枚举,要么使用static_cast,要么使用BabelPacket::Code作为地图索引类型。