Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Неопределенная ссылка на "vtable для MyDialog" вызывается, потому что нет никакого файла MOC. Большинство компиляторов C++ создает vtable определение в объектном файле, содержащем первую виртуальную функцию. При разделении на подклассы спокойного объекта и использовании макроса Q_OBJECT, это будет в moc*.cpp файле. Поэтому эта ошибка означает, что файл MOC отсутствует.
возможные проблемы, о которых я могу думать:
заголовочный файл для класса MyDialog.h не добавляется к ЗАГОЛОВКАМ в qmake файле.
Вы выполнили qmake для генерации make-файла прежде добавление макроса Q_OBJECT. Это создало make-файл без правил MOC. Это легко фиксируется путем простого выполнения qmake снова.
Ваше диалоговое окно происходит больше чем из одного класса, и QDialog не является первым классом, из которого это происходит. Для qmake для работы правильно QObject получил потребности базового класса быть первым классом, который наследован от.
при использовании спокойного Создателя Вы могли бы получить эту ошибку, если бы Ваше предыдущее развертывание было отказавшим из-за некоторой причины (как приложение, уже работающее). В этом случае просто сделайте 'Чистый Проект' и затем 'Восстанавливает Проект' и затем 'Выполнение' для развертывания.
Вы используете qmake? Возможно, Вы не добавили его к Вашему .cpp файл к Вашим ИСТОЧНИКАМ и.h файл к Вашей переменной ЗАГОЛОВКОВ в qmake файле?
Я кротко предлагаю, чтобы Вы использовали CMake для создания спокойных программ в Windows. Это сохранит Вас, не забывают добавлять соответствующие файлы к его файлам типа "build".
дополнительное значение - то, что можно генерировать make/nmake файлы типа "build" от него, файлы решения для Visual Studio. И если Вы скомпилируете QT из источника для Visual Studio, то Вы будете в состоянии и кодировать и создать с IDE/компилятором MS.
Это, конечно, при использовании Visual Studio вообще.
Сообщение неопределенной ссылки на `vtable for MyDialog 'также может быть результатом отсутствующей реализации (в MyDialog) чисто виртуальной функции в классе, из которого происходит MyDialog.