嗨,我的代码看起来像这样

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,然后添加;

10-07 13:48
查看更多