没有函数模板的实例与参数列表匹配

时间:2017-12-14 19:57:27

标签: c++ arrays templates pointers overloading

所以今天我试图为数组构建一个长度函数,它似乎工作。这是我的实施:

//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;比特

0 个答案:

没有答案