Разбор ошибок · статья

Ошибки компиляции Arduino

«expected ';'», «was not declared in this scope», «No such file or directory» — что означают самые частые ошибки, почему компилятор показывает не ту строку и как быстро всё исправить.

Как читать ошибки

Сообщения печатает компилятор C++, и он пишет по-английски. Trema IDE переводит суть: над консолью появляется русская карточка — что случилось, в каком файле и в какой строке. Клик по карточке приводит к месту проблемы.

Русская карточка ошибки компиляции Arduino в Trema IDE: пропущена точка с запятой
Ошибка объяснена по-русски: пропущена точка с запятой, указана строка.

Главное правило: читайте первую ошибку в списке. Одна опечатка часто рождает лавину сообщений — исправьте первую причину, и остальные исчезнут сами.

expected ';' before …

Потеряна точка с запятой. Каждая команда в C++ должна заканчиваться символом ;. Хитрость в том, что компилятор замечает пропажу только на следующей команде — поэтому смотрите не только на указанную строку, но и на строку выше неё.

'x' was not declared in this scope

«Имя x не объявлено». Компилятор встретил слово, которого не знает. Причины по частоте:

  • Опечатка. C++ различает большие и маленькие буквы: digitalwrite — это не digitalWrite.
  • Переменная не объявлена. Прежде чем пользоваться переменной, её нужно завести: int ledPin = 13;
  • Забыт #include. Команды из библиотеки работают только после её подключения в начале скетча.

No such file or directory

Компилятор не нашёл файл из строки #include — то есть библиотека не установлена или имя написано с ошибкой. Trema IDE в этом случае сама предлагает установить недостающую библиотеку из каталога:

Ошибка No such file or directory в Arduino: библиотека не найдена, Trema IDE предлагает установить её
Библиотека не найдена: можно исправить имя или установить её в один клик. Подробнее — как установить библиотеку.

expected '}' at end of input

Не закрыта фигурная скобка. Каждой открывающей { нужна закрывающая }. Поставьте курсор на скобку — редактор подсветит её пару; так легко найти, какая осталась одинокой.

redefinition of 'void setup()'

В программе две функции setup() (или две loop()). Так бывает, когда пример вставили целиком в конец существующего скетча. В программе должна остаться ровно одна setup() и одна loop() — перенесите нужные команды внутрь существующих функций.

Ошибка не в коде: сборка прошла, а загрузка — нет

Если сборка закончилась успешно, а дальше пишет об ошибке порта — это не ошибка компиляции, а связь с платой: не выбран или занят COM-порт, не установлен драйвер, кабель без данных. Разбор таких случаев — в инструкции «Плата не видна: драйверы CH340 и CP2102».

Ничего не помогло? Напишите в поддержку и приложите файл «Диагностика для поддержки» из программы — в нём журнал сборки, по которому мы быстро найдём причину.

Вопросы

Частые вопросы об ошибках

Остались вопросы? Напишите нам

Почему ошибки компилятора на английском?

Сырые сообщения печатает сам компилятор C++, он не знает русского. Поэтому Trema IDE показывает над консолью русскую карточку: что случилось, в какой строке и что сделать. Клик по карточке приводит к месту ошибки.

Ошибка указывает не на ту строку. Так бывает?

Да, это особенность C++: компилятор замечает проблему там, где код перестал складываться, а причина часто на строку-две выше — например, потерянная точка с запятой или незакрытая скобка.

Код верный, но загрузка в плату не идёт

Это уже не ошибка компиляции, а проблема связи с платой: проверьте, выбран ли правильный порт, не занят ли он другой программой (например, монитором порта в другом окне) и установлен ли драйвер USB-моста.

Куда написать, если ошибка непонятна?

Напишите в поддержку и приложите файл «Диагностика для поддержки» из программы — в нём журнал сборки. Так мы разберём ваш случай быстрее и заодно улучшим русские подсказки.

Пусть ошибки объясняются по-русски

В Trema IDE каждая ошибка сборки — с русским объяснением и ссылкой на строку. Дома — бесплатно навсегда. Все статьи — в базе знаний, раздел «Ошибки и решения».