我正忙着初始化这个数组:
int menuNumber2FunctionDbase[]= { &functionA , &functionB , &functionC };
但它给出了:menuNumber2FunctionDbase 的近初始化和:从不兼容的指针类型初始化
我试过了int*
,functionA
而不是&functionA
我做错了什么?
如果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 };
解决了!你们太棒了!
我改变的是:void (*menuNumber2FunctionDbase[])() = { functieA , functieB , functieC };
您使用 typdef 的其他选项也不错,但会给出 :(near initialization for 'menuNumber2FunctionDbase[2]')
作为警告
奇迹般有效!非常感谢!
您可以使用std::function
,那么您不仅可以使用全局独立函数,还可以使用 C++11 lambda 或(借助std::bind
)成员函数。
std::function<void()> menuNumber2FunctionDbase[] = {
functieA, functieB, functieC
};