我需要从A *到C *的隐式转换; 我不能改变A的定义或实现。
class A
{
};
struct B: public A
{
};
struct C: public B
{
};
当我写下以下内容时:
A* p;
C* q = p;
我收到错误C2440;无法从A *转换为C *。 我能做些什么,我无法改变A.这两个类都是原始数据的简单结构。
答案 0 :(得分:5)
你能做到这一点的唯一方法是使用演员:
// a C++ style static_cast:
C* q = static_cast<C*>(p);
// or the less verbose C-style cast
C* q = (C*)p;
由于C
是A
的衍生物而并非每A
都是C
,因此无法隐式投放(就像您可以隐含地将C*
投射到A*
,因为每C
个A
(即A
具有“更少或相同的功能”比C
,但不是更多))。
我怀疑你真的必须指针类型之间的隐式转换。是什么让你认为你做的?