ожидаемое основное выражение перед токеном ','
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