«не виртуальный thunk to <имя метода>», на который ссылается: Vtable для <classname>в <objectfile.o> - PullRequest
12 голосов
/ 29 апреля 2011

При компиляции в режиме отладки моя компиляция 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, он отлично работает для обоих цели.

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

Кто-нибудь знает, что является причиной этой ошибки?

Ответы [ 2 ]

8 голосов
/ 24 октября 2012

Попал в ту же проблему. Это просто произошло, когда мы определили виртуальную функцию-член (в файле заголовка .h), но не реализовали ее (в файле .cpp).

В моем случае реализация находилась внутри #define, что препятствовало фактической компиляции. У GCC должно быть более явное сообщение для такой распространенной ошибки, такой как

virtual function <function> defined but not implemented in class <class>
0 голосов
/ 29 апреля 2011

мы начнем с очевидных битов: это говорит о том, что cpp не связан или вызовы ссылаются напрямую и не определены (вы можете определить чистый виртуальный).

помимо этого, могут быть различия в настройках сборки - обычно это происходит из-за видимости символов по умолчанию (флаги псевдонима Xcode и рекомендуемые настройки):

GCC_INLINES_ARE_PRIVATE_EXTERN = NO
GCC_SYMBOLS_PRIVATE_EXTERN = NO

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...