Код такой:
Это упрощенный код, выкинул все лишнее не относящееся к вопросу.
Хочу передать в функцию setDig указатель на функцию dotA либо dotB. Но при компиляции выходит такое сообщение: error: 'fun' cannot be used as a function.
Подскажите, что я делаю неправильно.
P.S. Нашел что нужно указывать таким образом
void (*fun)()
т.е.
void setDig(uint8_t position, uint8_t* p, uint8_t dig, const uint8_t* font, uint8_t byte4Sym, void (*fun)())
Но теперь новая ошибка: too many arguments to function.
Хотя там тот же самый вызов функции с тем же параметрами.
P.P.S.
Как оказалось надо было скопировать шапку функции. Вот таким образом:
void setDig(uint8_t position, uint8_t* p, uint8_t dig, const uint8_t* font, uint8_t byte4Sym, void (*fun)(uint8_t x, uint8_t y, uint8_t bit=1))
И все заработало. Благодарю всех за участие.
C++:
int fontSwitch;
void setup() { }
void loop() {
fontSwitch = 1;
write(0, 5);
fontSwitch = 2;
write(1, 6);
}
void write(uint8_t position, uint8_t dig) {
switch (fontSwitch) {
case 1: setDig(position, pos, dig, font1, 5, dotA); break;
case 2: setDig(position, pos, dig, font2, 5, dotB); break;
}
}
void setDig(uint8_t position, uint8_t* p, uint8_t dig, const uint8_t* font, uint8_t byte4Sym, void* fun) {
for (uint8_t x=0; x<byte4Sym; x++)
for (uint8_t y=0; y<8; y++) fun(p[position]+x, y, bitRead(font[x+dig*byte4Sym], y));
}
void dotA(uint8_t x, uint8_t y, uint8_t bit=1) {
}
void dotB(uint8_t x, uint8_t y, uint8_t bit=1) {
}
Хочу передать в функцию setDig указатель на функцию dotA либо dotB. Но при компиляции выходит такое сообщение: error: 'fun' cannot be used as a function.
Подскажите, что я делаю неправильно.
P.S. Нашел что нужно указывать таким образом
void (*fun)()
т.е.
void setDig(uint8_t position, uint8_t* p, uint8_t dig, const uint8_t* font, uint8_t byte4Sym, void (*fun)())
Но теперь новая ошибка: too many arguments to function.
Хотя там тот же самый вызов функции с тем же параметрами.
P.P.S.
Как оказалось надо было скопировать шапку функции. Вот таким образом:
void setDig(uint8_t position, uint8_t* p, uint8_t dig, const uint8_t* font, uint8_t byte4Sym, void (*fun)(uint8_t x, uint8_t y, uint8_t bit=1))
И все заработало. Благодарю всех за участие.
Изменено: