映射 [] 操作数不起作用 C++
map [] operand doesn't work c++
hi我的代码看起来像这个
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<std::basic_string<char>,State*(*)()>()'和'std::string{又名std::basic_string<char>}’)
就我所能看到的类型匹配,所以我真的不明白为什么我有一个错误
编辑:我把这条线路static std::map<std::string, createFunc> registery()
固定到static std::map<std::string, createFunc> registery;
但我知道我得到了另一个错误:
对"StateRegistry::registry"的未定义引用
static std::map<std::string, createFunc> registery()
这是一个函数的声明,尽管缺少分号,我不知道编译器为什么让我们这样做。
错误消息还告诉您类型实际上不匹配:
std::映射<std::basic_string<char>,状态*(*)()>()
最后一个()
表示该类型描述了一个不带参数的可调用对象。
您需要从registery
声明中删除()
,然后添加一个;
。
您的静态'寄存器'仅声明而未定义。要解决此问题,您可以将"={}"附加到声明中,使其也成为一个定义,或者添加一个定义语句,如"std::map<std::string,createFunc>注册处::Registery'添加到您的代码中。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- Bjarne Stroustrup Book - std_lib_facilities.h - 不起作用(未知类型名称)
- 为什么简单的算术减法在"if"条件下不起作用?
- 为什么Stroustup书中的has_f不起作用
- 你能检查一下为什么在这个代码中从链接列表中删除项目不起作用吗
- 嵌套While循环不起作用(C++问题)
- C++Matching Brackets 2解决方案不起作用
- 为什么这段代码不起作用,我该如何解决?
- 我正在开发服务器,ip作为参数传递不起作用