es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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*>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, el error ocurre porque el vector second es de tipo std::vector<b*>, lo cual significa que contiene punteros a objetos de tipo B. Sin embargo, la variable first es un puntero a un objeto de tipo A. Aunque B hereda de A, un objeto de tipo A no es necesariamente un objeto de tipo B. Por lo tanto, no es posible añadir un puntero a un objeto de tipo A a un vector de punteros de B usando push_back(). Una solución a esto sería crear un objeto de tipo B que herede las propiedades de A y luego añadir un puntero a ese objeto al vector.</b*>

Comments are closed.