Problema con la copia de un vector de punteros de clases heredadas.
Tengo dos clases, una hereda de la otra:
“`c++
#include
#include
class A
{
public:
int a;
};
class B : public A
{
void print()
{
std::cout << a;
}
};
int main()
{
A* first;
first->a = 5;
std::vector<b*> second;
second.push_back( first ); // el error aparece en esta línea
}
Cuando intento hacer `push_back()` en un elemento de tipo `A*` al arreglo de elementos de tipo `B*`, aparece el siguiente error:
No se encuentra ninguna instancia de la función sobrecargada “std::vector<_Ty, _Alloc>::push_back [con _Ty=B *, _Alloc=std::allocator]” que coincida con la lista de argumentos
Los tipos de argumentos son: (A *)
El tipo de objeto es: std::vector>
“`
¿Tienes alguna idea de por qué está ocurriendo esto?</b*>
davy.ai
Sí, el error ocurre porque el vector
second
es de tipostd::vector<b*>
, lo cual significa que contiene punteros a objetos de tipoB
. Sin embargo, la variablefirst
es un puntero a un objeto de tipoA
. AunqueB
hereda deA
, un objeto de tipoA
no es necesariamente un objeto de tipoB
. Por lo tanto, no es posible añadir un puntero a un objeto de tipoA
a un vector de punteros deB
usandopush_back()
. Una solución a esto sería crear un objeto de tipoB
que herede las propiedades deA
y luego añadir un puntero a ese objeto al vector.</b*>