Неопределенная ссылка на vtable. Попытка скомпилировать спокойный проект

Взгляните на документацию из get_matching_blocks()

Возвращает список троек, описывающих неперекрывающиеся совпадающие подпоследовательности. Каждая тройка имеет форму (i, j, n) и означает, что a [i: i + n] == b [j: j + n]. Тройки монотонно растут в i и j.

blockquote>

Так, согласно вашим входам "abxcd" и "cdab", он ищет «a» в «cdab», который находится в позиции 2 (начинается с 0), а затем «b» в позиции «3», что последняя позиция второй строки. К тому времени, когда он достигает 'x', вторая итерация строки уже завершена.

>>> s=difflib.SequenceMatcher(None,  "abxcd","cdab")
>>> s.get_matching_blocks()
[Match(a=0, b=2, size=2), Match(a=5, b=4, size=0)]

Давайте возьмем другой пример, где x="abxcd" и y="abcd" вы получите результат как ab, cd. Первоначально он ищет «a» в «abcd», который находится в позиции 0, и «b» в позиции 1, а также «c» и «d» в позициях 2 и 3 строки2

>>> s=difflib.SequenceMatcher(None,  "abxcd","abcd")
>>> s.get_matching_blocks()
[Match(a=0, b=0, size=2), Match(a=3, b=2, size=2), Match(a=5, b=4, size=0)]

51
задан ymoreau 23 August 2017 в 12:05
поделиться

8 ответов

Предупреждение: не делайте этого, если у вас уже есть файл .pro - вы его потеряете!

Чтобы автоматически гарантировать, что все файлы moc cpp созданы, вы можете получить qmake автоматически сгенерирует для вас файл .pro вместо того, чтобы писать его самостоятельно.

Запустите

qmake -project

в каталоге проекта, и qmake просканирует ваш каталог на предмет всех заголовков C ++ и исходных файлов для создания файлов moc cpp для.

44
ответ дан 7 November 2019 в 09:54
поделиться

Заголовочные файлы для компиляции MOC должны содержавшийся в ЗАГОЛОВКАХ + =... переменная:

я переместился, заголовочные файлы в Myproject.pro к ИСТОЧНИКАМ + =... разделяют, потому что я хочу иметь mySource.h и mySource.cpp в том же древовидном элементе. Но это является дефектным для спокойного Создателя. В результате произошла ошибка "Неопределенная ссылка на vtable". Это, кажется: QT обнаруживает заголовок для компиляции MOC только в ЗАГОЛОВКАХ + =... разделяют (или переменная). См. также корректный explaination в , другие stackoverflow отвечают на 110-секундный anwer, "я видел много способов решить проблему, но никакое объяснение того, почему это происходит, таким образом, здесь идет".. В моем уме это точно explaination проблемы, которая имеет, помогают мне к найденному и решают мою проблему.

0
ответ дан 7 November 2019 в 09:54
поделиться

The problem is almost certainly that you are not compiling or not linking in the generated moc_AddressBook.cpp file. (It should have been generated for you -- you are running Qt's moc on your code before compiling, right?)

To answer a little more thoroughly, the Q_OBJECT macro signals Qt's moc tool to create an extra implementation file that contains the code necessary to support QObject's meta-information system. If you had any signals or slots, it would do a few things for those as well.

An alternative solution might be to remove the Q_OBJECT macro. You probably don't want to do this, but it would help the immediate problem, and it isn't strictly necessary with the code that you've presented.

Also, I would note that your line:

#include "addressbook.h"

Should probably be:

#include "AddressBook.h"

based on how you presented the filenames in the question.

16
ответ дан 7 November 2019 в 09:54
поделиться

Предполагая, что вы используете qmake для создания файла Makefile, убедитесь, что AddressBook.h указан в переменной HEADERS вашего .pro файла, например,

HEADERS = AddressBook.h
9
ответ дан 7 November 2019 в 09:54
поделиться

У меня была та же проблема, но как только я определил свой конструктор в заголовочном файле. из .cpp ошибка исчезла. Также соответствующий файл moc отсутствовал в файловой системе и в разделе Makefile "compiler_moc_header_make_all". Я запустил qmake, и, наконец, все построено успешно. Я пошел проверить Makefile, и теперь он там.

2
ответ дан 7 November 2019 в 09:54
поделиться

Я столкнулся с той же проблемой, перестройте проект, никогда не обновляйте Makefile, я удаляю Makefile и перестраиваю, проблема исчезла. ps: запуск make из командной строки может дать вам более подробную информацию, чем IDE, и поможет разобраться в реальной проблеме.

1
ответ дан 7 November 2019 в 09:54
поделиться

При использовании Qt Creator:

  1. Build → Run qmake
  2. Build → Rebuild All
48
ответ дан 7 November 2019 в 09:54
поделиться

Перейдите к файлу .pro и убедитесь, что перед файлом .h есть «include». ЗАГОЛОВКИ + = include / file.h \ include / file2.h

0
ответ дан 7 November 2019 в 09:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: