【发布时间】:2015-11-28 10:24:01
【问题描述】:
嗨,我的代码看起来像这样
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");
}
问题是当我尝试编译它时,我收到了这个错误:
错误:'operator[]' 不匹配(操作数类型为 ‘std::map<:basic_string>, State* (*)()>()’和‘std::string {aka std::basic_string}')
据我所知,类型匹配,所以我不太明白为什么会出错
编辑:
我将这条线 static std::map<std::string, createFunc> registery() 固定为 static std::map<std::string, createFunc> registery;
但知道我得到另一个错误:
对 `StateRegistry::registry' 的未定义引用
【问题讨论】:
-
你的意思是写
static std::map<std::string, createFunc> registery;。 -
我不明白反对意见。这个问题与被错误消息混淆的 OP 一样清楚,如果关于 SO 的每个问题都有一个像这样清晰准确的例子,我会非常高兴。我很乐意给它不止一个 +1。