Документация
Уроки Открыть IDE
На главную
Урок 27

Типичные ошибки

Справочник ошибок компиляции и выполнения — с примерами и пояснениями

Два вида ошибок

В Idyllium существует два вида ошибок:

  • Ошибки компиляции — обнаруживаются до запуска программы. Программа не будет запущена, пока вы их не исправите.
  • Ошибки выполнения (runtime errors) — возникают во время работы программы. Компиляция проходит успешно, но при выполнении что-то идёт не так.

Ошибки компиляции: типы данных

Несовместимый тип при объявлении переменной

main.idyl:2: error: cannot assign 'string' value to 'int' variable

Переменной типа int нельзя присвоить строку. Используйте to_int() для преобразования.

Несовместимый тип при присваивании

main.idyl:3: error: cannot assign 'float' to 'int'

Переменная уже объявлена как int — в неё нельзя записать дробное число.

Переменная типа void

main.idyl:2: error: cannot declare variable of type 'void'

Тип void означает «ничего» и используется только как тип возврата функций.

Деление всегда возвращает float

main.idyl:4: error: cannot assign 'float' value to 'int' variable

Оператор / всегда возвращает float. Для целочисленного деления используйте div(a, b).

Ошибки компиляции: необъявленные имена

Использование необъявленной переменной

main.idyl:4: error: 'x' was not declared in this scope

Переменная x не была создана. Объявите её перед использованием.

Использование библиотеки без импорта

main.idyl:2: error: 'math' was not declared in this scope

Библиотеку нужно подключить: use math;

Ошибки компиляции: условия и циклы

Условие должно быть типа bool

main.idyl:2: error: condition must be 'bool', found 'int'

Условие в if, while, for должно быть логическим выражением. Используйте операторы сравнения: 5 > 0, x == 10 и т.д.

break и continue вне цикла

main.idyl:2: error: 'break' is only valid inside a loop

Операторы break и continue работают только внутри while, do-while и for.

Ошибки компиляции: функции

Функция не возвращает значение

main.idyl: warning: 'int' function must return a value

Функция объявлена как int, но не содержит return. Добавьте return result; в конец.

void-функция возвращает значение

main.idyl:2: error: 'void' function cannot return a value

Функция объявлена как void — она не может возвращать значение. Уберите return или смените тип на string.

Неправильное количество аргументов

main.idyl:6: error: function 'add' expects 2 argument(s), got 3

Функция add принимает 2 аргумента, а передано 3.

Ошибки компиляции: массивы

Неправильный размер массива

main.idyl:2: error: array initialization has 3 elements, expected 5

Количество элементов в инициализаторе должно совпадать с размером массива.

Метод динамического массива на статическом

main.idyl:3: error: '.add' is only available on dynamic arrays (dyn_array)

Статический массив имеет фиксированный размер. Используйте dyn_array<int> для динамического массива.

Ошибки компиляции: строки

Сравнение массива с числом

main.idyl:3: error: cannot compare 'array<int, 3>' with 'int'

Массив нельзя сравнивать с числом. Сравнивайте отдельные элементы: arr[0] > 5.

Ошибки выполнения

Деление на ноль

main.idyl:2: runtime error: division by zero

Деление на ноль невозможно. Проверяйте делитель перед операцией.

Выход за границы массива

main.idyl:3: runtime error: array index 5 out of bounds (size 3, valid indices 0-2)

Индекс 5 выходит за пределы массива из 3 элементов. Допустимые индексы: 0, 1, 2.

Выход за границы строки

main.idyl:4: runtime error: string index 10 out of bounds (length 3, valid indices 0-2)

Индекс 10 выходит за пределы строки длиной 3.

Некорректное преобразование

main.idyl:2: runtime error: 'to_int' cannot convert "abc" to integer

Строка "abc" не содержит число. Используйте метод .is_int() для проверки перед преобразованием.

Корень из отрицательного числа

main.idyl:4: runtime error: math.sqrt argument must be >= 0 (got -4)

Квадратный корень из отрицательного числа не определён в вещественных числах.

Файл не найден

main.idyl:4: runtime error: cannot open file "data.txt" for reading (file not found)

Файл data.txt не существует в файловой системе проекта. Создайте его перед чтением.

Pop из пустого массива

main.idyl:3: runtime error: cannot pop from empty array

Массив пуст — нечего извлекать. Проверяйте arr.length() > 0 перед вызовом pop().

Неизвестная кодировка

main.idyl:4: runtime error: unknown encoding 'cp866'

Кодировка cp866 не поддерживается. Используйте encoding.list_encodings() для получения списка доступных кодировок.

Как читать сообщения об ошибках

Каждое сообщение содержит:

  1. Файл и строкуmain.idyl:4 означает файл main.idyl, строка 4;
  2. Тип ошибкиerror (ошибка компиляции) или runtime error (ошибка выполнения);
  3. Описание — что именно пошло не так.
💡 Совет: начинайте исправлять ошибки с первой — часто исправление одной ошибки убирает несколько последующих.