私は後でメインループ()のタスクスケジューラで使用されるべきタスクリストを作成しようとしています。私は、コンストラクタを使用しようとしたが、コンパイラはこれを達成するための最も簡単な方法だろうどのようなエラー could not covert '{doKeypad,2000,0}' from '<brace-enclosed initializer list>' to 'Task'
関数ポインタを持つ配列コンストラクタ?
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() ...
を投げますか?私は手動でタスク配列を埋めるための関数を行うことができますが、それは見苦しいと見え、それは非常に読みにくいです。私はいくつかの同様の質問を見てきましたが、彼らは私のためのクラスとあまりにも複雑についてでした:/
機能の宣言はありますか? –
また、それは文体的な好みですが、関数ポインタを初期化したいときは、データポインタを作成する場合と同じように、アドレス&演算子 '&functionname'を使用します。裸の関数名はポインタに崩壊しますが、あるタイプの関数オブジェクトではなく、関数ポインタを扱っていることが読者には分かりません。 –
C++コンパイラでは、正しいプロトタイプを前提としていて、それは私のためにうまくコンパイルされます。http://rextester.com/RXVP25357おそらくあなたのコンパイラはC++標準をサポートしていませんか? –