"не виртуальный thunk to <имя методa>", на который ссылаются: Vtable для <classname> в <objectfile.o>
При компиляции в режиме отладки моя компиляция xcode имеет следующие ошибки связывания:
"<method name>", referenced from:
Vtable for <classname>in <objectfile.o>
"non-virtual thunk to <method name>", referenced from:
Vtable for <classname>in <objectfile.o>
странно: это происходит только в одной из моих целей сборки (обе цели почти одинаковы для этого кода), плюс, если эти методы определены в файле заголовка вместо .cpp, он отлично работает для обоих цели.
Все эти методы являются чисто виртуальными. Класс, в котором эти ошибки возникают, наследуется от нескольких классов, но только одна из них вызывает эти ошибки.
Кто-нибудь имеет какие-либо идеи о том, что вызывает эту ошибку?
Ответы
Ответ 1
Попал в ту же проблему.
Это просто произошло, когда мы определили виртуальную функцию-член (в заголовочном файле .h), но не выполнили ее (в файле .cpp).
В моем случае реализация была внутри #define, которая предотвращала фактическую компиляцию. GCC должен иметь более четкое сообщение для такой распространенной ошибки, как
virtual function <function> defined but not implemented in class <class>
Ответ 2
мы начнем с очевидных бит: это говорит о том, что cpp не связан, или что вызовы ссылаются напрямую и не определены (вы можете определить чистый виртуальный).
Кроме того, могут быть различия в настройках сборки - как правило, это из-за видимости символа по умолчанию (флаги псевдонимов Xcode и рекомендуемые настройки):
GCC_INLINES_ARE_PRIVATE_EXTERN = NO
GCC_SYMBOLS_PRIVATE_EXTERN = NO
существует несколько других настроек сборки, которые могут мешать - как структурируются ваши проекты... этот список может стать довольно большим.