嗨,我的代码看起来像这样
class State
{
public:
State * create(void);
};
typedef State * (*createFunc)(void);
class Registery
{
private:
static std::map<std::string, createFunc> registery()
public:
static void register_func(std::string key, createFunc func)
{
registery[key] = func;
}
static State * create(std::string key)
{
return registery[key]();
}
};
int main()
{
Registery::register_func("state", State::create);
State * s = Registery::create("state");
}
问题是当我尝试编译它时,我收到此错误:
据我所见类型匹配,所以我真的不明白为什么我有一个错误
编辑:
我将此行
static std::map<std::string, createFunc> registery()
固定为static std::map<std::string, createFunc> registery;
但知道我得到另一个错误:最佳答案
static std::map<std::string, createFunc> registery()
那是一个函数的声明,尽管缺少分号,而且我不确定为什么编译器会让您这样做。
该错误消息还告诉您类型实际上不匹配:
最后一个
()
指示类型描述了不带参数的可调用对象。您需要从
()
声明中删除registery
,然后添加;
。