Неопределенные символы: «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»
Устранение ошибки
Основная причина этой ошибки, скорее всего, заключается в том, что абстрактный базовый класс Obstacle содержит не -чистые виртуальные функции. Когда класс объявляет чистую виртуальную функцию (virtual void Method() = 0;), это означает, что производные классы должны переопределить реализацию.
Если вы определили нечистые виртуальные функции в Obstacle, компилятор ожидает найти их реализацию либо в базовом классе, либо в производных классах. Однако если эти реализации не предусмотрены, компилятор генерирует внутренние структуры (vtable и typeinfo), основанные на этих функциях. При связывании отсутствующие функции приводят к ошибкам с неопределенными символами.
Решение
Чтобы решить эту проблему, убедитесь, что все виртуальные методы в абстрактном базовом классе Obstacle объявлены. как чистые виртуальные функции. Это заставляет производные классы переопределять и реализовывать эти методы. Таким образом, будут предоставлены правильные реализации виртуальных методов, и процесс связывания должен пройти успешно без ошибок неопределенных символов.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3