大括号初始化函数指针数组:从'void(*(*)())()'到'void(*)()'的无效转换

时间:2013-10-14 21:15:05

标签: c++ c arrays arduino function-pointers

在我的arduino sketch中,我需要一个带有签名void foo()的函数指针数组。 我正在linux上使用ino命令行utillity(它使用了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)是函数指针的语法。

我错过了什么?

编辑:NEVERMIND IM STUPID 函数不是void foo(),而是fptr foo()[fptr =函数指针typedef] 浪费人们时间的真诚道歉

1 个答案:

答案 0 :(得分:3)

我可以使用此代码重现您的错误消息

void (*foo())() {}
void (*arr[])(void) = { &foo };

所以看起来函数的签名不是你想象的那样。用于保存指向foo的数组的数组需要声明如下:

void (*(*arr[])())(void) = {
    &foo
};

如果我是你,我会考虑使用typedef ...