В моем случае я использовал стороннюю библиотеку с заголовочными файлами и таким образом файл. я подклассифицировал один класс, и ошибка связи, подобная этой, возникла, когда я пытаюсь создать экземпляр моего подкласса.
Как упоминалось в @sergiy, известно, что это может быть проблема «rtti», мне удалось обходить ее на , поместив реализацию конструктора в отдельный .cpp-файл и применив флаги «-fno-rtti» к файлу. это работает хорошо.
, так как я до сих пор не совсем понимаю о внутренней ошибке этой ссылки, я не уверен, является ли мое решение общим. однако, я думаю, что это стоит сделать, прежде чем пытаться использовать адаптер, как упоминалось @francois. и, конечно, если все исходные коды доступны (не в моем случае), лучше перекомпилируйте с помощью «-frtti», если это возможно.
еще одна вещь, если вы решите попробовать свое решение, попробуйте сделать отдельный файл максимально простым и не используйте некоторые причудливые функции C++. обратите особое внимание на вещи, связанные с повышением, потому что многое зависит от rtti.
Я знаю, что это старое сообщение, но сегодня у меня была такая же проблема, и решение было просто определить мою виртуальную функцию как виртуальный abc() {} в базовом классе, а не виртуальный abc(); который дал ошибку. – Nav 2010-11-30 09:04:41
еще лучше как `virtual void abc() = 0;` (если базовая версия никогда не вызывается) – dhardy 2012-07-09 08:27:37
@Nav: Если вы определяете `abc()` как это, вы можете легко забыть переопределить `abc()` в и думаю, что все в порядке, так как вы все равно можете вызвать функцию без каких-либо проблем. Хорошая практика для реализации чистых виртуальных функций содержится в [этой статье] (http://www.artima.com/cppsource/pure_virtual.html), и это должно сделать функцию print «Чистая виртуальная функция», а затем сбой программа. – HelloGoodbye 2012-09-27 11:44:38