ожидаемое основное выражение перед токеном ','

c++

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};

Мы будем очень признательны за любую помощь!

, 👍0

Обсуждение

Можете ли вы предоставить источник, откуда вы скопировали код? Можете ли вы предоставить код 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


1 ответ


Лучший ответ:

0

Чтобы ответить на ваш вопрос, предположим, что ваш проект основан на примере 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