我正忙着初始化这个数组:
int menuNumber2FunctionDbase[]= { &functionA , &functionB , &functionC };
但它给出了:接近menuNumber2FunctionDbase的初始化 和:从不兼容的指针类型
初始化我已尝试int*
和functionA
而不是&functionA
我做错了什么?
答案 0 :(得分:4)
如果functionA
(B
,C
)是返回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 };
修改强>
由于您的functieA
(B
,C
)是不返回任何值且不带参数的函数,因此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
};