0

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

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

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

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

我做错了什么?

4

3 回答 3

4

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

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

你可以functionB这样调用:

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

此外,正如 dmitri 所建议的,您可以定义您的数组类型:

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

编辑

由于您的functieA( B, C) 是不返回值且不带参数的函数,因此 typedef 应该是这样的:

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

如果不使用typedef,数组声明应该是:

void (*menuNumber2FunctionDbase[])(void)  = { functionA, functionB, functionC };
于 2013-09-21T13:44:19.570 回答
0

解决了!你们太棒了!

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

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

奇迹般有效!非常感谢!

于 2013-09-21T13:51:16.740 回答
0

您可以使用std::function,那么您不仅可以使用全局独立函数,还可以使用 C++11 lambda 或(借助std::bind)成员函数。

std::function<void()> menuNumber2FunctionDbase[] = {
    functieA, functieB, functieC
};
于 2013-09-21T14:03:46.010 回答