【发布时间】:2013-09-13 03:47:31
【问题描述】:
我正在尝试按键访问地图数据结构的元素,但出现编译器错误。我已经使用 typedefs 定义了我的地图数据结构,以简化地图实例化的语法。可以看到,key 是string 类型,数据是自定义GameComponent 对象:
typedef map<string, GameComponent*> ComponentMap;
typedef map<string, GameComponent*>::iterator ComponentMapIter;
typedef map<string, GameComponent*>::const_iterator ComponentMapCIter;
在GameComponent 的派生类中,我正在为存储在我的地图中的每个唯一 GameComponent 对象创建标准复合模式方法以及访问器。但是,使用数组下标运算符访问访问器中的对象会导致编译器错误:
void Character::add(const string& key, GameComponent* comp)
{
m_components->insert( make_pair(key, comp) );
}
void Character::remove(const string& key)
{
m_components->erase(key);
}
Armor* Character::getArmor() const
{
// ERROR:
return static_cast<Armor*>(m_components["Armor"]);
}
Weapon* Character::getWeapon() const
{
// ERROR:
return static_cast<Weapon*>(m_components["Weapon"]);
}
Attributes* Character::getAttributes() const
{
// ERROR:
return static_cast<Attributes*>(m_components["Attributes"]);
}
编译器错误的输出显示“无效类型”错误,这让我摸不着头脑:
/Users/Dylan/Desktop/RPG/character.cpp: In member function 'Armor* Character::getArmor() const':
/Users/Dylan/Desktop/RPG/character.cpp:66: error: invalid types 'ComponentMap* const[const char [6]]' for array subscript
/Users/Dylan/Desktop/RPG/character.cpp: In member function 'Weapon* Character::getWeapon() const':
/Users/Dylan/Desktop/RPG/character.cpp:71: error: invalid types 'ComponentMap* const[const char [7]]' for array subscript
/Users/Dylan/Desktop/RPG/character.cpp: In member function 'Attributes* Character::getAttributes() const':
/Users/Dylan/Desktop/RPG/character.cpp:76: error: invalid types 'ComponentMap* const[const char [11]]' for array subscript
【问题讨论】:
标签: c++ data-structures map compiler-errors typedef