You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

关键修改点

  1. 数组声明从int melody1[]改为int melody1[][2],明确这是一个二维数组,每个子数组包含2个int元素。
  2. 给所有仅含音符的条目补全时长值(示例中用NOTE_QUARTER,可替换为你需要的时长常量),确保每个子数组的元素数量一致,让编译器能正确解析初始化列表。

内容的提问来源于stack exchange,提问作者Ignacio De León Avalos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 16:35:17