所以今天我试图为数组构建一个长度函数,它似乎工作。这是我的实施:
//utils.h
template<typename T, unsigned S>
unsigned int length(const T(&arr)[S]) { return S; }
我觉得很简单。 但是当我尝试将数组传递给函数然后调用此长度函数时,它会给我以下错误:
Patterns.h:5: note mismatched types const T [S] and const byte* {aka const unsigned char*}
或悬停在intellisense上:
no instance of the function template "length" matches the argument list
该功能的实施:
//Patterns.h
#pragma once
#include "utils.h"
void displayPattern(const byte pins[], const byte displayData[])
{
for (byte i = 0; i < length(displayData); i++)
{
但是我不明白的奇怪之处在于它在我的其他文件中有效:
//Project.ino (Yes this is arduino project)
#pragma once
#include "Patterns.h"
const byte leds[] = { 13, 12, 11, 10, 9 };
void setup() {
for (byte i = 0; i < length(leds); i++) //Does not give a error
为什么它在第三个文件中有效,但在第二个文件中却没有?它是否必须对数组是通过引用传递而不是通过值传递这一事实?
任何帮助都会被贬低。
注意:byte与unsigned char(在Arduino中)相同,它仅用于表示数字或数组&#39;比特