Ich versuche eine Aufgabenliste zu erstellen, die später in main loop() im Aufgabenplaner verwendet werden soll. Ich habe versucht, Konstruktor zu verwenden, aber Compiler wirft einen Fehler could not covert '{doKeypad,2000,0}' from '<brace-enclosed initializer list>' to 'Task'
Array-Konstruktor mit Funktionszeigern?
struct Task{
void (*proc)(); // Process callback
unsigned long dly; // delay in ms
unsigned long mls = 0; // last run in millis()
};
Task task[] = { // This is much more readable
{doKeypad, 2000, 0}, // but it does not work :)
{doPower, 10, 0},
{doDallas, 800, 0},
{doLcd, 500, 0}
};
void doKeypad(){
// some code here...
}
// rest of code follows - doPower(), doDallas() ...
Was ist der einfachste Weg, dies zu erreichen wäre? Ich kann eine Funktion ausführen, um das Aufgabenarray manuell zu füllen, aber es sieht hässlich aus und es ist nicht sehr lesbar. Ich habe einige ähnliche Fragen gesehen, aber sie waren über Klassen und zu kompliziert für mich:/
Haben Sie eine Forward-Deklaration für die Funktionen? –
Es ist auch nur eine stilistische Präferenz, aber wenn ich einen Funktionszeiger initialisieren möchte, benutze ich den Adressoperator '& functionname', genau wie ich es machen würde, wenn ich einen Datenzeiger mache. Der Name der bloßen Funktion wird zu einem Zeiger zerfallen, aber es ist einem Leser nicht so klar, dass es sich um einen Funktionszeiger im Gegensatz zu einem Funktionsobjekt eines Typs handelt. –
Auf einem C++ - Compiler, vorausgesetzt, die richtigen Prototypen, kompiliert es gut für mich: http://rexttester.com/RXVP25357 Vielleicht unterstützt Ihr Compiler nicht den C++ - Standard? –