【发布时间】:2016-11-01 21:49:26
【问题描述】:
我有这门课:
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&)>’
};
^
知道为什么吗?
【问题讨论】:
-
由于您使用
enum struct,我认为您不能在不强制转换的情况下从枚举成员中初始化unsigned int键。 -
注意所有大写常量在 C++ 中都是反模式
-
将
std::map<unsigned int,更改为std::map<BabelPacket::Code,
标签: c++