将孩子的传染媒介分配给祖父母传染媒介

时间:2012-10-27 15:21:25

标签: c++

所以我有以下课程:

class A {}
class B : public A {}
class C : public B {}

当我尝试执行以下操作时,出现错误:

vector<C*> v1; //already instantiated with a vector of pointers to C.
vector<A*>* v2 = &v1;
  

错误C2440:'初始化':无法转换为'std::vector<_Ty> *'
  到'std::vector<_Ty> *'指向的类型是不相关的;转换
  需要reinterpret_cast,C风格的演员或函数式演员

如果CA的后代,为什么会发生这种情况?

1 个答案:

答案 0 :(得分:4)

虽然C来自A,但std::vector<C*>并非来自std::vector<A*>,因此您无法将前一类型的对象的地址分配给vector<A*>* v2 = &v1; /* *v2 is declared as a vector<A*> so we can do this: */ v2->push_back(new B); /* Now we have effectively added a pointer to a B object to the vector v1, which is supposed to be a vector of C objects only! */ 后者的指针。

想象一下,如果你能做到这一点会变成什么:

int main()
{
  std::vector<C*>  v1;
  std::vector<A*>  v2(begin(v1),end(v1));
  return 0;
}

但是,当然可以采取以下措施:

v2

在这里,我们创建了一个新的向量v1,并将C的元素复制到其中。这是可能的,因为A源自{{1}}。