【发布时间】:2012-10-17 13:50:23
【问题描述】:
所以我有以下课程:
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 风格转换或函数风格转换
如果C 是A 的后代,为什么会发生这种情况?
【问题讨论】:
-
因为
vector<A *>不是vector<C *>的基础? -
是的,C 是 A 的后代并不意味着 vector
是 vector 的后代。 C++ 根本不能那样工作。也许您需要分配一个新的向量并一个一个地复制项目,或者您应该首先从 vector 开始。 -
感谢您的快速回答!
-
@Gerardo 你可以认为它只是名称的一部分。例如,
vector<C*>类似于vector_Cptr,vector<A*>类似于vector_Aptr。他们没有任何关系,只是名字有点相似而已。
标签: c++