【发布时间】:2014-10-07 21:18:56
【问题描述】:
我有一个播放器类,有:
typedef string cptype;
map <cptype, unique_ptr<Cp> > Cps;
我添加了指向此地图的指针:
Cps.insert(make_pair("Pos", unique_ptr<Cp>(new PosCp())));
现在当我尝试使用这个访问 PosCp 的 pos 成员变量时:
Cps["Pos"]->pos = sf::Vector2f(0, 0);
我得到错误:
class Cp has no member pos
当我尝试使用dynamic_cast 时:
dynamic_cast<PosCp*>(Cps["Pos"])->pos = sf::Vector2f(0, 0);
我得到错误:
cannot dynamic_cast [this object]
(当然,我不想更改指针,我只想访问成员变量)
如何在不改变地图指针类型的情况下访问成员pos?
这里是 Cp 和 PosCp 类:
class Cp
{
public:
Cp();
virtual ~Cp();
cptype type;
};
class PosCp : public Cp
{
public:
PosCp();
~PosCp();
sf::Vector2f pos;
};
【问题讨论】:
标签: c++ pointers dictionary inheritance dynamic-cast