Распространенные ошибки в Qt у начинающих
В процессе преподавания программированию на Qt наработал порцию стандартных ошибок, которые допускают студенты. Ниже представлены некоторые из них.
📖 Содержание ⬇️
Содержание
Забыли закрыть программу
error: ld returned 1 exit status

Рисунок 1 — Ошибка «error: ld returned 1 exit status»
Если возникает такая ошибка, то вы забыли закрыть запущенное приложение. Qt пытается создать новый EXE файл, но так как открыта старая версия, то вылезает ошибка.
Забыли удалить объявление метода
error: undefined reference to `MainWindow::on_textEdit_destroyed()'

Рисунок 2 — Ошибка «error: undefined reference…»
Если возникает такая ошибка (или подобного типа), то вы перешли к слоту какого-то объекта (в данном слоте textEdit), создали метод, он вам не понравился, и вы его удалили.
Но метод объявлен был еще в mainwindow.h, и оттуда вы объявление не удалили. Удалите:

Рисунок 3 — Объявление метода тоже нужно удалить
Редактируемый проект не активный
Иногда возникает проблема. Вы редактируете проект, компилируете проект, но вместо вашей программы вылезает другая программа.
Проверьте, является ли ваш редактируемый проект активным или нет:

Рисунок 4 — Необходимый проект неактивный
Если проект активный, но всё равно изменения не отражаются на компилируемом приложении, то перестройте проект:

Рисунок 5 — Попытка перестроить проект
Обнуляйте переменные
Вы запрограммировали код нахождения суммы чисел:
int s;
for (int i=0;i<10;i++)
s=s+i;
ui->textEdit->insertPlainText(QString::number(s));
Но он выдает громадные числа, например: 2686553.
В C++ переменные хранят мусор после своего создания, они не равны нулю по умолчанию. А если к мусору прибавить число, то получится мусор. Вот правильный код:
int s=0;
for (int i=0;i<10;i++)
s=s+i;
ui->textEdit->insertPlainText(QString::number(s));
Не во всех строчках в конце стоит точка с запятой
Решили найти сумму чисел:
int s=0;
for (int i=0;i<10;i++);
s=s+i;
ui->textEdit->insertPlainText(QString::number(s));
А при компилировании вылетает ошибка: error: name lookup of 'i' changed for ISO 'for' scoping [-fpermissive].
В циклах и условиях в конце строчки точка с запятой не ставится. Вот правильный код:
int s=0;
for (int i=0;i<10;i++)
s=s+i;
ui->textEdit->insertPlainText(QString::number(s));
Не забывайте точку с запятой
int s=0;
for (int i=0;i<10;i++)
s=s+i
ui->textEdit->insertPlainText(QString::number(s));

Рисунок 6 — Ошибка при отсутствии точки запятой
А вот в других случаях точка с запятой нужна. И если ошибка выдается такая: error: expected ';' before, то в предыдущей строке вы забыли точку с запятой. Вот правильный код:
int s=0;
for (int i=0;i<10;i++)
s=s+i;
ui->textEdit->insertPlainText(QString::number(s));