【发布时间】:2013-10-14 21:15:04
【问题描述】:
在我的 arduino 草图中,我需要一个带有签名 void foo() 的函数指针数组。
我在 linux 上使用ino 命令行实用程序(在后台使用 avr-g++)。
但是我在定义数组时遇到了一个非常奇怪的错误。
错误:
error: invalid conversion from ‘void (* (*)())()’ to ‘void (*)()’
在这段代码中
void (*mode_setup[])(void) = {
&show_time_setup,
&set_time_setup,
&set_alarm_setup,
&set_date_setup // <-- generates 3 identical error on this line
};
我不明白我做错了什么,因为...int foo[] = { 1, 2, 3 }; .. 完全有效,void (*foo)(void) 是函数指针的语法。
我错过了什么?
编辑:不要介意我愚蠢 函数不是 void foo(),而是 fptr foo() [fptr=function pointer typedef] 对浪费大家时间表示诚挚的歉意
【问题讨论】:
-
我觉得你需要
(*mode_setup)[]。 -
set_date_setup的签名是什么? -
看来
show_time_setupet al 是返回函数指针的函数,而不是void。 -
Works for me。问题一定出在您没有显示的代码中。很可能,这四个函数中的一个或多个实际上并不像
void f() -
除了我原来的评论:无论何时使用函数指针,typedef 确实使代码更具可读性 -
typedef void (*setup_func)(void);和setup_func mode_setup[] = { ... };将是我选择的解决方案。
标签: c++ c arrays arduino function-pointers