ожидаемое основное выражение перед токеном ','
EDIT: проблема решена. Не хватало кавычек вокруг каждой буквы. Спасибо за помощь, st2000!
Я новичок в Arduino и C++ (кодирование в целом!). Скопировал пример кода, только изменив ноты, чтобы сделать свою собственную мелодию. Но когда я нажимаю «подтвердить», я получаю сообщение об ошибке выше, и я не могу понять, что не так! Я искал и читал несколько форумов и часто задаваемых вопросов, но ничего не нашел. Это код, который у меня есть, где возникает ошибка:
int melody[]={
a,C,D,
a,a,C,D,D,C,
C,C,D,D,C,
C,D,E,F,E,D,C};
Мы будем очень признательны за любую помощь!
@user60325, 👍0
Обсуждение1 ответ
Лучший ответ:
Чтобы ответить на ваш вопрос, предположим, что ваш проект основан на примере Melody на сайте www.arduino.cc. .
Вероятно, вы хотели ввести значения ASCII этих букв в массив type char (подойдет и тип int. Но в некоторых случаях char будет более эффективным). Для этого вам нужно поставить одинарные кавычки вокруг каждой буквы. В частности, вам нужно изменить свой код:
int melody[]={ a,C,D, a,a,C,D,D,C, C,C,D,D,C, C,D,E,F,E,D,C};
...чтобы ваша строка кода выглядела так:
int melody[]={'a','C','D','a','a','C','D','D','C','C','C','D','D','C','C','D','E','F','E','D','C'};
Это предположение, которое мне кажется неправильным. Хранение char в массиве int — пустая трата места., @Kwasmich
@Kwasmich, возможно, ты прав. Я думаю, что видел некоторые комбинации процессора и компилятора C, которые обрабатывали 8-битные значения, как если бы они были 16-битными. Трата памяти в пользу скорости., @st2000
@st2000: Например, в C. В языке C символьные константы имеют значение int. Нет ничего необычного в том, что платформа C использует 16-битное целое для обработки символьных констант как 16-битных значений. Вот как язык C требует, чтобы они обрабатывались., @AnT
Я понятия не имею, что означает вышеизложенное (пока!), но это решение сработало для меня. Спасибо :), @user60325
@ user60325, То, что компилятор делает «за кулисами» при оптимизации кода, иногда сбивает с толку. И это не обязательно прерогатива начинающего программиста. Но, если вы хотите узнать больше [это Q/A переполнения стека](https://stackoverflow.com/questions/5150447/c-question-why-char-actually-occupies-4-bytes-in-memory) ( прочитайте ответ, который начинается с «Давайте посмотрим на ваш вывод ...»), может помочь вам начать., @st2000
- C++ против языка Arduino?
- Как использовать SPI на Arduino?
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- Ошибка: expected unqualified-id before 'if'
- Что лучше использовать: #define или const int для констант?
- Библиотека DHT.h не импортируется
- Функции со строковыми параметрами
- Светодиоды: разница между общим анодом и общим катодом
Можете ли вы предоставить источник, откуда вы скопировали код? Можете ли вы предоставить код wole? Трудно сказать, что не так, если мы не видим определения этих переменных
a CDEF., @KwasmichСкорее всего, эти ноты (от a до g, от A до G) являются либо частотными значениями, либо сопоставленными частотными значениями., @Michel Keijzers
Я думаю то же самое, но сомневаюсь, что они были определены где-либо в коде. Это приводит к сообщению об ошибке компилятора., @Kwasmich
Угадав, я думаю, что ОП основал свой проект на [этом примере](https://www.arduino.cc/en/tutorial/melody)., @st2000
Итак, что такое «a,C,D, a,a,C,D,D,C»? К чему относятся эти идентификаторы?, @AnT
Вы заметили, что ваш
#define…ничего не определяет? (ну, он определяет буквы, но без смысла, кроме того, что они определены), @KwasmichЗакрой его. Речь идет об ошибке, вызванной простой опечаткой, @AnT