Arduino编译报错:‘int类型标量初始化器周围有大括号’求助
Arduino无源蜂鸣器乐曲代码编译错误解决
错误原因分析
你的编译矛盾来自数组声明和初始化的类型不匹配:
- 声明的
int melody1[]是一维int数组,但初始化时用了嵌套大括号(比如{NOTE_E2, NOTE_HALF}),这相当于试图把一个数组(而非单个int值)塞进一维数组的元素里,编译器因此抛出braces around scalar initializer for type 'int'错误。 - 删除指定大括号后,整个初始化列表结构混乱,编译器找不到匹配的闭合大括号,所以报
expected '}' before ';' token错误。
解决方案
你需要用二维数组存储每个音符对应的音高和时长,因为每个条目需要两个整数信息(音高+时长)。修改后的代码如下:
#include "pitches.h" // 用音符名替代赫兹值 #include "npm.h" // 控制每分钟节拍数 // 二维数组:每个元素存储[音符, 时长] int melody1[][2] = { {NOTE_E2, NOTE_HALF}, {NOTE_E2, NOTE_HALF}, {NOTE_F2, NOTE_HALF}, {NOTE_FS2, NOTE_WHOLE}, {NOTE_A2, NOTE_QUARTER}, // 补全时长,可根据需求替换为其他常量 {NOTE_FS2, NOTE_QUARTER}, {NOTE_A2, NOTE_QUARTER}, {NOTE_FS2, NOTE_QUARTER}, {NOTE_F2, NOTE_QUARTER}, {NOTE_E2, NOTE_QUARTER}, {NOTE_B2, NOTE_QUARTER}, {NOTE_E2, NOTE_QUARTER}, {NOTE_E2, NOTE_QUARTER} };
关键修改点
- 数组声明从
int melody1[]改为int melody1[][2],明确这是一个二维数组,每个子数组包含2个int元素。 - 给所有仅含音符的条目补全时长值(示例中用
NOTE_QUARTER,可替换为你需要的时长常量),确保每个子数组的元素数量一致,让编译器能正确解析初始化列表。
内容的提问来源于stack exchange,提问作者Ignacio De León Avalos
相关产品推荐
相关产品推荐

