C/Visual C - Problemas con un “downcast” en Visual

 
Vista:

Problemas con un “downcast” en Visual

Publicado por alvaro (10 intervenciones) el 22/06/2001 15:30:31
Hola a todos:

Tengo un pequeño problema con un programa que estoy desarrollando, el problema al que me enfrento se basa en que no soy capaz de capturar la excepción que se origina con "dynamic_cast<>" cuando este es erróneo..., alguno de vosotros sabe qué excepción es lanzada, he probado con todo incluso con bad_cast pero sigue sin capturarla.

Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Capturando excepciones en dynamic_cast

Publicado por Alejandro (913 intervenciones) el 26/09/2024 23:11:15
Hola, Álvaro.

Cuando se produce un error en un `dynamic_cast`, se lanza una excepción de tipo `std::bad_cast`. Sin embargo, es importante tener en cuenta que `std::bad_cast` es una subclase de `std::exception`, por lo que también puedes capturarla utilizando `std::exception` como tipo de excepción.

Aquí tienes un ejemplo de cómo capturar la excepción `std::bad_cast` en un `dynamic_cast`:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
try {
    Derived* derivedPtr = dynamic_cast<Derived*>(basePtr);
    if (derivedPtr == nullptr) {
        throw std::bad_cast(); // Lanzar excepción si el dynamic_cast falla
    }
    // Resto del código si el dynamic_cast tiene éxito
} catch (const std::bad_cast& e) {
    // Capturar y manejar la excepción std::bad_cast
    std::cout << "Error: dynamic_cast fallido" << std::endl;
} catch (const std::exception& e) {
    // Capturar y manejar cualquier otra excepción derivada de std::exception
    std::cout << "Error: " << e.what() << std::endl;
} catch (...) {
    // Capturar y manejar cualquier otra excepción no derivada de std::exception
    std::cout << "Error desconocido" << std::endl;
}

En este ejemplo, se intenta realizar un `dynamic_cast` de un puntero `basePtr` a un puntero `Derived*`. Si el `dynamic_cast` falla, se lanza una excepción `std::bad_cast`. Esta excepción se captura en el bloque `catch (const std::bad_cast& e)` y se puede manejar adecuadamente.

Si aún no puedes capturar la excepción, asegúrate de que el `dynamic_cast` se está realizando en el lugar correcto y de que no hay ninguna manipulación adicional de excepciones que pueda estar interfiriendo con la captura.

Espero que esta información te sea útil para capturar la excepción `std::bad_cast` en tu programa. ¡Buena suerte con tu desarrollo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar