"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que estou recebendo erros de símbolos indefinidos \"vtable\" e \"typeinfo\" em meu código C++?

Por que estou recebendo erros de símbolos indefinidos \"vtable\" e \"typeinfo\" em meu código C++?

Publicado em 2024-11-08
Navegar:345

Why Am I Getting \

Símbolos indefinidos: "vtable" e "typeinfo"

No código fornecido, surge um erro de vinculação com as seguintes mensagens:

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

Compreendendo "vtable" e "typeinfo"

  • vtable (tabela de método virtual): Um dado estrutura usada pelos compiladores para armazenar ponteiros para os métodos virtuais de uma classe. Ele permite que objetos de classes derivadas chamem as implementações corretas de métodos virtuais.
  • typeinfo (Runtime Type Information): Informações armazenadas na memória do objeto que identificam o tipo do objeto. Ele permite verificação dinâmica de tipo e comportamento polimórfico.

Resolvendo o erro

A causa raiz deste erro é provavelmente que a classe base abstrata Obstacle contém não -funções virtuais puras. Quando uma classe declara uma função virtual pura (virtual void Method() = 0;), isso significa que as classes derivadas devem substituir a implementação.

Se você definiu funções virtuais não puras em Obstacle, o compilador espera encontrar suas implementações na classe base ou nas classes derivadas. Porém, se essas implementações não forem fornecidas, o compilador gera estruturas internas (vtable e typeinfo) que dependem dessas funções. Ao vincular, as funções ausentes levam a erros de símbolo indefinido.

Solução

Para resolver esse problema, certifique-se de que todos os métodos virtuais na classe base abstrata Obstáculo sejam declarados como funções virtuais puras. Isso força as classes derivadas a substituir e implementar esses métodos. Ao fazer isso, as implementações corretas do método virtual serão fornecidas e o processo de vinculação deverá ser bem-sucedido sem os erros de símbolo indefinido.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3