Типичные ошибки
Справочник ошибок компиляции и выполнения — с примерами и пояснениями
Два вида ошибок
В Idyllium существует два вида ошибок:
- Ошибки компиляции — обнаруживаются до запуска программы. Программа не будет запущена, пока вы их не исправите.
- Ошибки выполнения (runtime errors) — возникают во время работы программы. Компиляция проходит успешно, но при выполнении что-то идёт не так.
Ошибки компиляции: типы данных
Несовместимый тип при объявлении переменной
Переменной типа int нельзя присвоить строку. Используйте to_int() для преобразования.
Несовместимый тип при присваивании
Переменная уже объявлена как int — в неё нельзя записать дробное число.
Переменная типа void
Тип void означает «ничего» и используется только как тип возврата функций.
Деление всегда возвращает float
Оператор / всегда возвращает float. Для целочисленного деления используйте div(a, b).
Ошибки компиляции: необъявленные имена
Использование необъявленной переменной
Переменная x не была создана. Объявите её перед использованием.
Использование библиотеки без импорта
Библиотеку нужно подключить: use math;
Ошибки компиляции: условия и циклы
Условие должно быть типа bool
Условие в if, while, for должно быть логическим выражением. Используйте операторы сравнения: 5 > 0, x == 10 и т.д.
break и continue вне цикла
Операторы break и continue работают только внутри while, do-while и for.
Ошибки компиляции: функции
Функция не возвращает значение
Функция объявлена как int, но не содержит return. Добавьте return result; в конец.
void-функция возвращает значение
Функция объявлена как void — она не может возвращать значение. Уберите return или смените тип на string.
Неправильное количество аргументов
Функция add принимает 2 аргумента, а передано 3.
Ошибки компиляции: массивы
Неправильный размер массива
Количество элементов в инициализаторе должно совпадать с размером массива.
Метод динамического массива на статическом
Статический массив имеет фиксированный размер. Используйте dyn_array<int> для динамического массива.
Ошибки компиляции: строки
Сравнение массива с числом
Массив нельзя сравнивать с числом. Сравнивайте отдельные элементы: arr[0] > 5.
Ошибки выполнения
Деление на ноль
Деление на ноль невозможно. Проверяйте делитель перед операцией.
Выход за границы массива
Индекс 5 выходит за пределы массива из 3 элементов. Допустимые индексы: 0, 1, 2.
Выход за границы строки
Индекс 10 выходит за пределы строки длиной 3.
Некорректное преобразование
Строка "abc" не содержит число. Используйте метод .is_int() для проверки перед преобразованием.
Корень из отрицательного числа
Квадратный корень из отрицательного числа не определён в вещественных числах.
Файл не найден
Файл data.txt не существует в файловой системе проекта. Создайте его перед чтением.
Pop из пустого массива
Массив пуст — нечего извлекать. Проверяйте arr.length() > 0 перед вызовом pop().
Неизвестная кодировка
Кодировка cp866 не поддерживается. Используйте encoding.list_encodings() для получения списка доступных кодировок.
Как читать сообщения об ошибках
Каждое сообщение содержит:
- Файл и строку —
main.idyl:4означает файлmain.idyl, строка 4; - Тип ошибки —
error(ошибка компиляции) илиruntime error(ошибка выполнения); - Описание — что именно пошло не так.