Erstmal vielen Dank für eure Antworten.
constexpr size_t arrayCellCount(const auto &array)
{
return sizeof(array)/sizeof(array[0]);
}
void setup() {
Serial.begin(9600);
int myInts[] = {1, 50, 500, 700};
Serial.println(arrayCellCount(myInts));
}
void loop()
{
}
liefert bei mir:
t5:1: error: 'constexprsize_t' does not name a type
constexpr size_t arrayCellCount(const auto &array)
^
D:\arduino\Sketch\t5\t5.ino:1:33: warning: use of 'auto' in parameter declaration only available with -std=c++1y or -std=gnu++1y
constexpr size_t arrayCellCount(const auto &array)
^
exit status 1
'constexprsize_t' does not name a type
Habe die erste Zeile mal zu int arrayCellCount(const auto &array) geändert, dann lief es bei mir.
Wenn ich euchrichtig verstanden habe, ist das der Weg als Referenz den Serenifly auch beschreibt?
Die 55 ist nur ein Beispielwert. (Meine Funktion soll mir die Position in einem Bereich zurückgeben. Ich übergebe neben dem Wert ein Array mit den Bereichsgrenzen. Soll mir viele if, elseif ersparen.)
==========
Die Größe kann man dann als extra Parameter übergeben. Das ist Standard in C:
Ok, hatte ich zwar schon mal in anderen Beispielen gesehen und mich gewundert, warum man das übergibt und nicht ermittelt, aber wenn dass in c++ Standard ist, weiß ich jetzt mehr.
In C++ gibt es aber auch Referenzen. Und bei einer Referenz auf ein Array geht auch sizeof():
...
Geht aber dann nur mit Arrays dieser Größe
Wenn ich vorher die Größe festlegen muss, hilft mir das nichts, da ich die gerne variabel hätte.
Die Variante mit dem Template sieht interessant aus, aber ich verstehe sie nicht, da ich noch nie mit Templates zu tun hatte. Ich werde dann jetzt auch den Standard-Weg verwenden, ist ja nicht ohne Grund Standard
und mich evtl. später mal mit den Templates beschäftigen.
Vielen Dank für die Hilfe.
Viele Grüße Frank