std::map:模板参数的数目错误,并且指定了只读位置 我正在学习C++中的设计模式。现在我正在尝试实现抽象工厂模式。我有以下与std::map相关的错误。我想要一个映射,其中FactoryType作为键,而unique\u ptr作为值指向此factory类型。目前我面临着许多我不了解的问题。你能解释一下怎么了吗 inc/GameObject/GameObjectFactory.hpp:13:59:错误:模板参数数量错误(1,应至少为2) std::unique_ptr>FactoriesArray; ^~ /usr/include/c++/8/bits/stl_map.h:100:11:注意:为“模板类std::map”提供 类图 ^~~ inc/GameObject/GameObjectFactory.hpp:在构造函数“GameObjectFactory::GameObjectFactory()”中: inc/GameObject/GameObjectFactory.hpp:25:67:错误:分配只读位置“Player”[((GameObjectFactory*)this)->GameObjectFactory::m_factories]' m_factories[“Player”]=std::make_unique(); ^ inc/GameObject/GameObjectFactory.hpp:在成员函数“std::unique_ptr GameObjectFactory::create(std:_cx11::string)”中: inc/GameObject/GameObjectFactory.hpp:30:27:错误:运算符[]不匹配(操作数类型为'FactoriesArray'{aka'int'}和'const string'{aka'const std::_cxx11::basic_string'}) auto obj=m_工厂[type]->create();

std::map:模板参数的数目错误,并且指定了只读位置 我正在学习C++中的设计模式。现在我正在尝试实现抽象工厂模式。我有以下与std::map相关的错误。我想要一个映射,其中FactoryType作为键,而unique\u ptr作为值指向此factory类型。目前我面临着许多我不了解的问题。你能解释一下怎么了吗 inc/GameObject/GameObjectFactory.hpp:13:59:错误:模板参数数量错误(1,应至少为2) std::unique_ptr>FactoriesArray; ^~ /usr/include/c++/8/bits/stl_map.h:100:11:注意:为“模板类std::map”提供 类图 ^~~ inc/GameObject/GameObjectFactory.hpp:在构造函数“GameObjectFactory::GameObjectFactory()”中: inc/GameObject/GameObjectFactory.hpp:25:67:错误:分配只读位置“Player”[((GameObjectFactory*)this)->GameObjectFactory::m_factories]' m_factories[“Player”]=std::make_unique(); ^ inc/GameObject/GameObjectFactory.hpp:在成员函数“std::unique_ptr GameObjectFactory::create(std:_cx11::string)”中: inc/GameObject/GameObjectFactory.hpp:30:27:错误:运算符[]不匹配(操作数类型为'FactoriesArray'{aka'int'}和'const string'{aka'const std::_cxx11::basic_string'}) auto obj=m_工厂[type]->create();,c++,C++,以下是导致问题的代码: #包括 #包括 #包括 #包括“GameObject/AbstractGameObjectFactory.hpp” #包括“GameObject/PlayerObject工厂.hpp” typedef std::映射因子数组; 类GameObjectFactory { 私人: FactoriesArray m_工厂; 受保护的: 公众: GameObjectFactory() { m_factories[“Player”]=std::make_unique(); } st

以下是导致问题的代码:

#包括
#包括
#包括
#包括“GameObject/AbstractGameObjectFactory.hpp”
#包括“GameObject/PlayerObject工厂.hpp”
typedef std::映射因子数组;
类GameObjectFactory
{
私人:
FactoriesArray m_工厂;
受保护的:
公众:
GameObjectFactory()
{
m_factories[“Player”]=std::make_unique();
}
std::unique_ptr create(const std::string类型)
{
auto obj=m_工厂[type]->create();
返回标准::移动(obj);
}
};

您的
typedef
格式稍有错误。您需要从
std::string type
中删除
type
,如下所示:


typedef std::map您的
typedef
格式稍有错误。您需要从
std::string type
中删除
type
,如下所示:


typedef std::maperor确实不是很清楚<代码>标准::字符串类型
错误。删除额外的
类型
。错误确实不太清楚<代码>标准::字符串类型
错误。删除额外的
type
m_工厂[type]
也有风险,
m_工厂。at(type)
更安全。@Jarod42更新
m_工厂[type]
也有风险,
m_工厂。at(type)
更安全。@Jarod42更新