«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему я получаю ошибки неопределенных символов «vtable» и «typeinfo» в моем коде на C++?

Почему я получаю ошибки неопределенных символов «vtable» и «typeinfo» в моем коде на C++?

Опубликовано 9 ноября 2024 г.
Просматривать:572

Why Am I Getting \

Неопределенные символы: «vtable» и «typeinfo»

В предоставленном коде возникает ошибка связывания со следующими сообщениями:

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

Понимание «vtable» и «typeinfo»

  • vtable (таблица виртуальных методов): Данные структура, используемая компиляторами для хранения указателей на виртуальные методы класса. Это позволяет объектам производных классов вызывать правильные реализации виртуальных методов.
  • typeinfo (информация о типе времени выполнения): Информация, хранящаяся в памяти объекта, которая идентифицирует тип объекта. Он обеспечивает динамическую проверку типов и полиморфное поведение.

Устранение ошибки

Основная причина этой ошибки, скорее всего, заключается в том, что абстрактный базовый класс Obstacle содержит не -чистые виртуальные функции. Когда класс объявляет чистую виртуальную функцию (virtual void Method() = 0;), это означает, что производные классы должны переопределить реализацию.

Если вы определили нечистые виртуальные функции в Obstacle, компилятор ожидает найти их реализацию либо в базовом классе, либо в производных классах. Однако если эти реализации не предусмотрены, компилятор генерирует внутренние структуры (vtable и typeinfo), основанные на этих функциях. При связывании отсутствующие функции приводят к ошибкам с неопределенными символами.

Решение

Чтобы решить эту проблему, убедитесь, что все виртуальные методы в абстрактном базовом классе Obstacle объявлены. как чистые виртуальные функции. Это заставляет производные классы переопределять и реализовывать эти методы. Таким образом, будут предоставлены правильные реализации виртуальных методов, и процесс связывания должен пройти успешно без ошибок неопределенных символов.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3