Assign vector of children to vector of grandparents
c++
Solution
While `C` is derived from `A`, `std::vector<C*>` isn't derived from `std::vector<A*>`, so you can't assign the address of an object of the former type to a pointer for the latter.
Imagine what would become possible if you could do this:
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! */
However, of course the following is possible:
int main()
{
std::vector<C*> v1;
std::vector<A*> v2(begin(v1),end(v1));
return 0;
}
Here, we create a new vector `v2` and copy the elements of `v1` into it. This is possible because `C` is derived from `A`.
Problem
So I have the following classes: ``` class A {} class B : public A {} class C : public B {} ``` When I try do the following, I get an error: ``` vector<C*> v1; //already instantiated with a vector of pointers to C. vector<A*>* v2 = &v1; ``` error C2440: 'initializing' : cannot convert from `'std::vector<_Ty> *'` to `'std::vector<_Ty> *'` Types pointed to are unrelated; conversion requires `reinterpret_cast`, C-style cast or function-style cast If `C` is a descendant of `A`, why is this happening?