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.

Error: ISO C++17 no permite especificaciones de excepción dinámicas.

Estoy intentando ejecutar mi proyecto con una nueva versión de GCC 11.2.0 y tengo un problema con el error de especificaciones de excepción dinámica:

mtree.h:669:85: error: C++17 no permite las especificaciones de excepción dinámica
669 | void addData(const Data & data, double distance, const mtree * mtree) throw (SplitNodeReplacement) {
| ^ ~~~~

mtree.h:723:98: error:C++17 no permite las especificaciones de excepción dinámica
723 | virtual void doRemoveData(const Data & data, double distance, const mtree * mtree) throw (DataNotFound) = 0;

No soy bueno en c++. Así que, por favor, ayúdeme a resolver este problema. He cambiado la configuración predeterminada (es decir, “cppStandard”: “c++17” a “cppStandard”: “c++11”), pero aún así obtengo el mismo problema.

Por favor, consulte el siguiente enlace para el código del proyecto – https://github.com/erdavila/M-Tree.

El mismo código se estaba ejecutando en Windows 8.1 y ahora estoy enfrentando este problema después de actualizar a Windows 10. ¿Hay alguna manera de solucionarlo?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que el uso de especificaciones de excepción dinámicas no está permitido en ISO C++17. Esto significa que las declaraciones de lanzamiento no deben incluir los tipos de excepciones que las funciones pueden lanzar.

    Para resolver este problema, debe eliminar las declaraciones de lanzamiento en las declaraciones de función en el archivo de encabezado mtree.h. Específicamente, ubique las líneas que contienen “throw” y elimínelas. Por ejemplo, la línea:

    void addData(const Data& data, double distance, const mtree* mtree) throw(SplitNodeReplacement) {

    debe cambiarse a:

    void addData(const Data& data, double distance, const mtree* mtree) {

    Repita este proceso para todas las declaraciones de funciones que contengan “throw”. También debe eliminar todas las instancias de “throw” en las correspondientes definiciones de función en el archivo de origen mtree.cc.

    Después de realizar estos cambios, vuelva a compilar su proyecto con la nueva versión de GCC 11.2.0 y el problema debería resolverse.

    Tenga en cuenta que las especificaciones de excepción dinámicas fueron degradadas en C++11 y eliminadas en C++17, por lo que generalmente es una buena práctica evitar usarlas. En su lugar, puede utilizar especificaciones noexcept o dejar que las excepciones se propaguen normalmente sin especificarlas en las declaraciones de función.

Comments are closed.