"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué recibo errores de símbolos indefinidos \"vtable\" y \"typeinfo\" en mi código C++?

¿Por qué recibo errores de símbolos indefinidos \"vtable\" y \"typeinfo\" en mi código C++?

Publicado el 2024-11-08
Navegar:798

Why Am I Getting \

Símbolos no definidos: "vtable" y "typeinfo"

En el código proporcionado, surge un error de vinculación con los siguientes mensajes:

Undefined symbols:
  "vtable for Obstacle", referenced from:
      Obstacle::Obstacle()in Myworld.o
  "typeinfo for Obstacle", referenced from:
      typeinfo for RECTANGLEin RECTANGLE.o
      typeinfo for CIRCLEin CIRCLE.o

Comprensión de "vtable" y "typeinfo"

  • vtable (tabla de métodos virtuales): Un dato Estructura utilizada por los compiladores para almacenar punteros a los métodos virtuales de una clase. Permite que los objetos de clases derivadas llamen a las implementaciones correctas de métodos virtuales.
  • typeinfo (Información de tipo de tiempo de ejecución): Información almacenada en la memoria del objeto que identifica el tipo de objeto. Permite la verificación de tipos dinámicos y el comportamiento polimórfico.

Resolviendo el error

La causa principal de este error es muy probable que la clase base abstracta Obstacle no contenga -funciones virtuales puras. Cuando una clase declara una función virtual pura (método virtual void() = 0;), significa que las clases derivadas deben anular la implementación.

Si ha definido funciones virtuales no puras en Obstacle, el compilador espera encontrar sus implementaciones en la clase base o en las clases derivadas. Sin embargo, si no se proporcionan estas implementaciones, el compilador genera estructuras internas (vtable y typeinfo) que dependen de esas funciones. Al vincular, las funciones que faltan provocan errores de símbolo indefinido.

Solución

Para resolver este problema, asegúrese de que todos los métodos virtuales en la clase base abstracta Obstacle estén declarados como funciones virtuales puras. Esto obliga a las clases derivadas a anular e implementar estos métodos. Al hacerlo, se proporcionarán las implementaciones correctas del método virtual y el proceso de vinculación debería tener éxito sin errores de símbolos indefinidos.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3