可能重复:
Conversion between Derived** to Base**我不能从指针指向派生类的指针和指向基类的指针吗?
我收到回C++经过几年大多的Python,和我打起来反对强类型的墙。我认为我有基本的多态性和基类派生类指针之间的类型转换(例如Can a pointer of a derived class be type cast to the pointer of its base class?),但是这里有一个stumper:为什么我不能指派一个指向派生类的指针指向p- to-p到它的基类?
欲了解更多的上下文(也许提示做这个更少pythonishly),这是我试图做的简化版本。我想要一个指向对象的指针列表(从单个类派生)和一个标识它们的字符串(即一个map<string, obj*>
)。然后一组组件将通过识别字符串和位置的列表来存储指向相应对象的指针(即map<string, obj**>
)。然后,我应该能够通过其字符串ID找到适当的对象,然后填写适当的指针供组件随后使用。 简化代码做,这是
#include <map>
#include <string>
using namespace std;
class base
{
};
class derived: public base
{
};
typedef map<string, base**> BasePtrDict;
typedef map<string, base*> BaseDict;
int main(int argc, char* argv[])
{
base b1, b2;
derived d;
derived* d_ptr;
BaseDict base_dict;
base_dict["b1"] = &b1;
base_dict.insert(make_pair("b2",&b2)); // alternate syntax
base_dict["d"]= &d;
BasePtrDict ptr_dict;
ptr_dict["d"] = &d_ptr;
for (auto b = ptr_dict.begin(); b != ptr_dict.end(); b++)
*(b->second) = base_dict[b->first];
return 0;
}
这在ptr_dict["d"] = &d_ptr;
运行到一个编译错误。为什么?在C++范例中,我该怎么做?我真的需要做到丑陋(不安全?)reinterpret_cast<base>()
无处不在吗?
谢谢所有有用的参考和示例。现在肯定有意义,我不得不考虑如何在保持强大的打字ala C++的同时优雅地做到这一点。 – Bismark 2012-07-12 09:00:57