Взгляните на документацию из 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)]
Предупреждение: не делайте этого, если у вас уже есть файл .pro - вы его потеряете!
Чтобы автоматически гарантировать, что все файлы moc cpp созданы, вы можете получить qmake автоматически сгенерирует для вас файл .pro вместо того, чтобы писать его самостоятельно.
Запустите
qmake -project
в каталоге проекта, и qmake просканирует ваш каталог на предмет всех заголовков C ++ и исходных файлов для создания файлов moc cpp для.
Заголовочные файлы для компиляции MOC должны содержавшийся в ЗАГОЛОВКАХ + =... переменная:
я переместился, заголовочные файлы в Myproject.pro к ИСТОЧНИКАМ + =... разделяют, потому что я хочу иметь mySource.h и mySource.cpp в том же древовидном элементе. Но это является дефектным для спокойного Создателя. В результате произошла ошибка "Неопределенная ссылка на vtable". Это, кажется: QT обнаруживает заголовок для компиляции MOC только в ЗАГОЛОВКАХ + =... разделяют (или переменная). См. также корректный explaination в , другие stackoverflow отвечают на 110-секундный anwer, "я видел много способов решить проблему, но никакое объяснение того, почему это происходит, таким образом, здесь идет".. В моем уме это точно explaination проблемы, которая имеет, помогают мне к найденному и решают мою проблему.
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.
Предполагая, что вы используете qmake для создания файла Makefile, убедитесь, что AddressBook.h указан в переменной HEADERS вашего .pro файла, например,
HEADERS = AddressBook.h
У меня была та же проблема, но как только я определил свой конструктор в заголовочном файле. из .cpp ошибка исчезла. Также соответствующий файл moc отсутствовал в файловой системе и в разделе Makefile "compiler_moc_header_make_all". Я запустил qmake, и, наконец, все построено успешно. Я пошел проверить Makefile, и теперь он там.
Я столкнулся с той же проблемой, перестройте проект, никогда не обновляйте Makefile, я удаляю Makefile и перестраиваю, проблема исчезла. ps: запуск make из командной строки может дать вам более подробную информацию, чем IDE, и поможет разобраться в реальной проблеме.
При использовании Qt Creator:
Перейдите к файлу .pro и убедитесь, что перед файлом .h есть «include». ЗАГОЛОВКИ + = include / file.h \ include / file2.h