编译Arduino电子宠物程序时遇数组下标类型错误的排查求助
编译错误原因分析:
invalid types 'int [3][double]' for array subscript 错误核心原因
- 类型不匹配:Arduino里的
round()函数返回的是double类型值,但C++要求数组下标必须是整数类型(比如int)。编译器无法识别用double作为一维数组下标的写法,误以为你在尝试访问一个不存在的二维数组int[3][double],于是抛出这个类型错误。
代码里的问题点
- 多余的
round()调用:在错误行之前,你已经把poopometer赋值为countPoops()的结果——如果countPoops()是统计现有便便数量的函数,它的返回值应该是整数。此时poopometer存储的是整数值(尽管是float类型),完全没必要用round(),反而画蛇添足引入了double类型的下标。 - 下标类型未转换:就算
poopometer真的带有小数,也必须把round()的结果强制转换为int类型,才能合法用作数组下标。
修复方法
方法1:直接用countPoops()的结果(推荐)
既然你已经将poopometer设为countPoops()的返回值,直接用这个整数当下标即可,省去round():
poops[countPoops()] = random(20, display.width() + 32);
方法2:强制转换round()的结果
如果必须保留round(),把结果转成int类型:
poops[(int)round(poopometer)] = random(20, display.width() + 32);
额外注意
要确保下标值在0~2之间(因为poops数组只有3个元素,下标从0开始),避免运行时出现数组越界的崩溃问题。可以添加判断:
int idx = (int)round(poopometer); if (idx >= 0 && idx < 3) { poops[idx] = random(20, display.width() + 32); }
内容的提问来源于stack exchange,提问作者Slangfil
相关产品推荐
相关产品推荐

