Pregunta

Mientras compilar con avr-gcc he encontrado errores de enlace tales como los siguientes:

undefined reference to `__cxa_pure_virtual'

He encontrado este documento que establece :

  

La función __cxa_pure_virtual es un controlador de errores que se invoca cuando una función virtual pura se llama.

     

Si usted está escribiendo una aplicación de C ++ que tiene funciones virtuales puras debe proporcionar su propia función de gestor de errores __cxa_pure_virtual. Por ejemplo:

     

extern "C" void __cxa_pure_virtual() { while (1); }

La definición de esta función como soluciones sugeridas los errores pero me gustaría saber:

  • cuál es el propósito de esta función es,
  • ¿Por qué debería necesitar definir yo mismo y
  • por eso que es aceptable para codificar como un bucle infinito?
¿Fue útil?

Solución

Si cualquier parte del tiempo de ejecución de su programa se crea un objeto con un puntero de función virtual no rellenado, y cuando la función correspondiente se llama, se le llama una 'función virtual pura'.

El manejador describes debe definirse en las bibliotecas predeterminadas que vienen con su entorno de desarrollo. Si le sucede a omitir las bibliotecas predeterminadas, encontrará este controlador indefinido: el enlazador ve una declaración, pero no hay una definición. Que es cuando se necesita proporcionar su propia versión.

El bucle infinito es aceptable porque es un error 'fuerte': los usuarios de su software de inmediato se notará. Cualquier otra aplicación 'ruidosa' es aceptable, también.

scroll top