Подтвердить что ты не робот

"не виртуальный 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, он отлично работает для обоих цели.

Все эти методы являются чисто виртуальными. Класс, в котором эти ошибки возникают, наследуется от нескольких классов, но только одна из них вызывает эти ошибки.

Кто-нибудь имеет какие-либо идеи о том, что вызывает эту ошибку?

4b9b3361

Ответ 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

существует несколько других настроек сборки, которые могут мешать - как структурируются ваши проекты... этот список может стать довольно большим.