如何初始化这个充满&函数和&函数的数组?

时间:2013-09-21 13:40:20

标签: c++ arrays eclipse gcc avr

我正忙着初始化这个数组:

int menuNumber2FunctionDbase[]= { &functionA , &functionB , &functionC };

但它给出了:接近menuNumber2FunctionDbase的初始化 和:从不兼容的指针类型

初始化

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

我做错了什么?

3 个答案:

答案 0 :(得分:4)

如果functionABC)是返回int并且不带参数的函数,则需要声明数组具有有效类型:< / p>

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

您可以像这样致电functionB

 std::cout << menuNumber2FunctionDbase[1]() << std::endl;

另外,正如dmitri建议的那样,您可以定义数组类型:

 typedef int (*int_funct)();
 int_funct menuNumber2FunctionDbase[] = { functionA, functionB, functionC };

修改

由于您的functieABC)是不返回任何值且不带参数的函数,因此typedef应如下所示:

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

不使用typedef,数组声明应为:

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

答案 1 :(得分:0)

解决!你们真棒!

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

您使用typdef的其他选项也很不错,但会将(near initialization for 'menuNumber2FunctionDbase[2]')作为警告

像魅力一样!非常感谢!

答案 2 :(得分:0)

您可以使用std::function,然后您不仅可以使用全局独立函数,还可以使用C ++ 11 lambdas或(在std::bind}成员函数的帮助下。

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