C++ 如何初始化此填充了&;的数组;功能性;功能B?

C++ 如何初始化此填充了&;的数组;功能性;功能B?,c++,arrays,eclipse,gcc,avr,C++,Arrays,Eclipse,Gcc,Avr,我正忙于初始化此阵列: int menuNumber2FunctionDbase[]= { &functionA , &functionB , &functionC }; 但它给出了:接近初始化的menuNumber2FunctionDbase 和:从不兼容的指针类型初始化 我尝试了int*和functionA而不是&functionA 我做错了什么?如果函数a(B,C)是返回int且不带参数的函数,则需要声明数组以具有有效类型: int (*menuNumber2F

我正忙于初始化此阵列:

int menuNumber2FunctionDbase[]= { &functionA , &functionB , &functionC };
但它给出了:接近初始化的menuNumber2FunctionDbase 和:从不兼容的指针类型初始化

我尝试了
int*
functionA
而不是
&functionA


我做错了什么?

如果
函数a
B
C
)是返回
int
且不带参数的函数,则需要声明数组以具有有效类型:

 int (*menuNumber2FunctionDbase[])()  = { functionA, functionB, functionC };
您可以这样调用
functionB

 std::cout << menuNumber2FunctionDbase[1]() << std::endl;
typedef void (*void_funct)(void);
void_funct menuNumber2FunctionDbase[] = { functionA, functionB, functionC };
编辑

由于
函数a
B
C
)是不返回值且不带参数的函数,因此typedef应如下所示:

 std::cout << menuNumber2FunctionDbase[1]() << std::endl;
typedef void (*void_funct)(void);
void_funct menuNumber2FunctionDbase[] = { functionA, functionB, functionC };
如果不使用
typedef
,数组声明应为:

void (*menuNumber2FunctionDbase[])(void)  = { functionA, functionB, functionC };

如果
函数a
B
C
)是返回
int
且不带参数的函数,则需要声明数组的有效类型:

 int (*menuNumber2FunctionDbase[])()  = { functionA, functionB, functionC };
您可以这样调用
functionB

 std::cout << menuNumber2FunctionDbase[1]() << std::endl;
typedef void (*void_funct)(void);
void_funct menuNumber2FunctionDbase[] = { functionA, functionB, functionC };
编辑

由于
函数a
B
C
)是不返回值且不带参数的函数,因此typedef应如下所示:

 std::cout << menuNumber2FunctionDbase[1]() << std::endl;
typedef void (*void_funct)(void);
void_funct menuNumber2FunctionDbase[] = { functionA, functionB, functionC };
如果不使用
typedef
,数组声明应为:

void (*menuNumber2FunctionDbase[])(void)  = { functionA, functionB, functionC };

解决了!你们太棒了

我改变的是:
void(*menuNumber2FunctionDbase[])()={functieA,functieB,functieC}

使用typdef的另一个选项也很不错,但给出了一个警告:
(接近“menuNumber2FunctionDbase[2]”的初始化)


工作起来很有魅力!非常感谢

解决了!你们太棒了

我改变的是:
void(*menuNumber2FunctionDbase[])()={functieA,functieB,functieC}

使用typdef的另一个选项也很不错,但给出了一个警告:
(接近“menuNumber2FunctionDbase[2]”的初始化)

工作起来很有魅力!非常感谢

您可以使用,然后您不仅可以使用全局独立函数,还可以使用C++11 lambdas或(在帮助下)成员函数

std::function<void()> menuNumber2FunctionDbase[] = {
    functieA, functieB, functieC
};
std::函数menuNumber2FunctionDbase[]={
functieA,functieB,functieC
};
您可以使用,然后您不仅可以使用全局独立函数,还可以使用C++11 lambda或(在帮助下)成员函数

std::function<void()> menuNumber2FunctionDbase[] = {
    functieA, functieB, functieC
};
std::函数menuNumber2FunctionDbase[]={
functieA,functieB,functieC
};


什么是
功能
?指向返回
int
的函数的指针?我不知道
&function
是什么,但它显然不是
int
。您需要告诉我们functionA是什么,以及您实际想要实现什么。functionA初始化为:void function(void){some_test_code};它可能与被调用函数的无效性有关,什么是
function
?指向返回
int
的函数的指针?我不知道
&function
是什么,但它显然不是
int
。您需要告诉我们functionA是什么,以及您实际想要实现什么。functionA初始化为:void function(void){some_test_code};这可能与被调用函数的无效有关?我建议在回答中使用typedef:
typedef int(*funct)(参数)这是为了更好的可读性…我会添加注释,谢谢!我建议在回答中使用typedef:
typedefint(*funct)(参数)这是为了更好的可读性…我会添加注释,谢谢!你应该接受他的回答,而不是贴出你自己的答案的副本;我很感谢你们的帮助和见解。然后说明我已经实现了他的解决方案,以及如何实现。可能对其他人有帮助。这怎么会是一个副本?你可以通过评论对你有帮助的答案来做到。你应该接受他的答案,而不是发布你自己的副本。不太明白;我很感谢你们的帮助和见解。然后说明我已经实现了他的解决方案,以及如何实现。可能对其他人有帮助。这怎么会是重复的?你可以通过评论有帮助的答案来做到这一点。不知道这是否可行:为AVR atmega644 mcu的Eclipse Keppler工作…不知道这是否可行:为AVR atmega644 mcu的Eclipse Keppler工作。。。